CSAPP(datalab)解析

news2024/9/20 2:55:18

howManyBits 

/* howManyBits - 返回用二进制补码表示x所需的最小位数
 *  示例: howManyBits(12) = 5
 *            howManyBits(298) = 10
 *            howManyBits(-5) = 4
 *            howManyBits(0)  = 1
 *            howManyBits(-1) = 1
 *            howManyBits(0x80000000) = 32
 *  合法操作: ! ~ & ^ | + << >>
 *  最大操作数: 90
 *  难度: 4
 */
逻辑:利用二分法,逼近最高位1对应的位数

(1)将负数转换为其按位取反值

(2)检查前16位,若存在1,则至少需要16位,x>>16,否则x>>0

(3)

IEEE 754 单精度浮点数表示法

单精度浮点数的表示方式如下:

  • 符号位(S):第 31 位        表示数值的正负。
  • 阶码(E):第 30 到第 23 位     表示数值的指数。
  • 尾数(M):第 22 到第 0 位      表示数值的有效数字。

非规格数: 

  • 符号位(s):1位。
  • 阶码部分(E):8位,全为0。
  • 尾数部分(f):23位,直接用于表示数值,不包含隐含的1。

floatScale2 :

2*f的位级等效形式

​
/* 
 * floatScale2 - 返回表达式2*f的位级等效形式
 *   浮点参数f。
 *   参数和结果都作为无符号整数传递,但
 *   它们要被解释为单精度浮点值的位级表示。
 *   当参数是NaN时,返回参数
 *   合法操作: 任何整数/无符号操作包括||, &&。也包括if, while
 *   最大操作数: 30
 *   难度: 4
 */

​
注意:

阶码:

(1)阶码达到255(即0x7F800000),则表示结果为无穷大

(2)阶码部分全为 0(非规格化数或0),需要转为规格数

尾数:

(1)规格化数变为无穷大,尾数为0

(2)零和非规格化数,左移尾数一位相当于将数值乘以2。

(3)若左移尾数,可能到24位(esp不为0),成为规格化数

(4)frac <<= 1;左移后赋值,frac << 1左移得到新值但原值未改变

floatFloat2Int:

一个32位的单精度浮点数表示转换为一个32位的整数表示

/* 
 * floatFloat2Int - 返回表达式(int) f的位级等效形式
 *   浮点参数f。
 *   参数作为无符号整数传递,但
 *   它要被解释为单精度浮点值的位级表示。
 *   任何超出范围的值(包括NaN和无穷大)应返回
 *   0x80000000u。
 *   合法操作: 任何整数/无符号操作包括||, &&。也包括if, while
 *   最大操作数: 30
 *   难度: 4
 */
注意:

二进制:

(1)0x80000000u 为无符号整数

阶码        真实指数(阶码值 - 127偏移量):

(1)小于1(exp <= 0),返回0

(2)超出int 32位整数范围(exp大于31),返回无穷大

尾数:

(1)通过 frac |= 0x00800000,我们在尾数中强制设置第24位为1,将其转换为 1.M 的形式

(2)尾数frac(1.M ,       23位二进制数M),通过esp位数左移右移得到结果作为result

floatPower2

返回表达式2.0^x的位级等效形式

/* 
 * floatPower2 - 返回表达式2.0^x的位级等效形式
 *   (2.0的x次方)对于任何32位整数x。
 *
 *   返回的无符号值应该具有与单精度浮点数2.0^x相同的位级表示。
 *   如果结果太小,无法表示为非正规数,则返回0。如果太大,返回+INF。
 * 
 *   合法操作: 任何整数/无符号操作包括||, &&。也包括if, while 
 *   最大操作数: 30 
 *   难度: 4
 */
注意:

(1)+INF(正无穷大).0x7F800000

  • 符号位 S = 0(正数)
  • 阶码 E = 255(全为1,二进制 11111111
  • 尾数 M = 0

(2)x(真实指数) (-126 ~  -149)(非规范化浮点数)不超出尾数范围,返回尾数

测试结果:

Points  Rating  Errors  Points  Ops     Puzzle
1       1       0       2       7       bitXor
1       1       0       2       1       tmin
1       1       0       2       8       isTmax
2       2       0       2       7       allOddBits
2       2       0       2       2       negate
3       3       0       2       11      isAsciiDigit
3       3       0       2       8       conditional
3       3       0       2       5       isLessOrEqual
4       4       0       2       6       logicalNeg
4       4       0       2       36      howManyBits
4       4       0       2       12      floatScale2
4       4       0       2       17      floatFloat2Int
4       4       0       2       9       floatPower2

Score = 62/62 [36/36 Corr + 26/26 Perf] (129 total operators)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1693872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】TCP协议【上】{协议段属性:源端口号/目的端口号/序号/确认序号/窗口大小/紧急指针/标记位}

文章目录 1.引入2.协议段格式4位首部长度16位窗口大小32位序号思考三个问题【demo】标记位URG: 紧急指针是否有效提升某报文被处理优先级【0表示不设置1表示设置】ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带R…

【C++】详解AVL树——平衡二叉搜索树

个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 祝福语&#xff1a;愿你拥抱自由的风 目录 二叉搜索树 AVL树概述 平衡因子 旋转情况分类 左单旋 右单旋 左右双旋 右左双旋 AVL树节点设计 AVL树设计 详解单旋 左单旋 右单旋 详解双旋 左右双旋 平衡因子情况如…

远程工作的数据安全挑战和解决策略

随着远程工作的普及&#xff0c;数据安全面临了前所未有的挑战。企业在应对这些挑战时&#xff0c;必须采取切实有效的策略来保护敏感信息。以下是远程工作数据安全的主要挑战和相应的解决策略&#xff1a; 数据安全挑战 设备丢失或被盗&#xff1a;员工在外工作时&#xff0c…

从 0 开始本地部署大语言模型

1、准备 ● Ollama&#xff1a;ollama.com ● Docker&#xff1a;https://docs.openwebui.com/ 2、下载 Ollama 进入 Ollama 官网&#xff0c;点击 Download 。 下载完成后&#xff0c;双击安装&#xff0c;什么都不需要勾选&#xff0c;直接下一步即可。安装完成&#xf…

算法之堆排序

堆排序是一种基于比较的排序算法&#xff0c;通过构建二叉堆&#xff08;Binary Heap&#xff09;&#xff0c;可以利用堆的性质进行高效的排序。二叉堆是一个完全二叉树&#xff0c;可以有最大堆和最小堆两种形式。在最大堆中&#xff0c;父节点的值总是大于或等于其子节点的值…

【TB作品】stm32单片机读取DS2401程序

DS2401是由Analog Devices公司生产的一种硅序列号芯片&#xff0c;它提供了一个绝对唯一的64位ROM识别码&#xff0c;用于确保可追溯性。以下是对DS2401器件的分析&#xff1a; 特点和优势&#xff1a; 唯一性&#xff1a;每个DS2401芯片都有一个独一无二的64位注册码&#x…

Redis机制-Redis缓存穿透,击穿,雪崩理解等问题的理解和学习

目录 一 缓存穿透问题 二 缓存击穿问题 三 缓存雪崩问题&#xff1a; 图1 正常的Redis缓存流程 一 缓存穿透问题 我们都知道Redis是一个存储键值对的非关系型数据库&#xff0c;那么当用户进行查询的时候&#xff0c;势必会从前端发起请求&#xff0c;从而数据从Redis缓存…

MySQL笔记第三天(从小白到入门)

文章目录 MySQL笔记SQL语言介绍数据库系统关系型数据库非关系型数据库SQL和数据库系统的关系数据库系统架构 MySQL的介绍概念MySQL的版本 MySQL的DDL操作-重点基本数据库操作基本表操作 MySQL的DML操作-重点insert-插入数据update-更新数据delete-删除数据 MySQL的约束-了解概述…

RabbitMQ .NET

setup rabbitmq docker run --namerabbit -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASSxxx -d rabbitmq:management ip:15672 login nuget RabbitMQ.Client Send //1.1.实例化连接工厂 var factory new ConnectionFactory() …

WordPress搭建流程

1. 简介 WordPress 是一个 PHP 编写的网站制作平台。WordPress 本身免费,并且拥有众多的主题可以使用,适合用于搭建个人博客、公司官网、独立站等。 2. 环境准备 2.1 WordPress 下载 WordPress 可以在 Worpress中文官网 下载(如果后续要将后台调成中文的话,一定要从中文…

虚拟局域网(VLAN)

关键词&#xff1a;veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈 前言 在过去的几十年里&#xff0c;互联网发展得非常快。许多新兴技术迅速崛起&#xff0c;也有不少曾经的主流技术被淘汰。然而&#xff0c;有些技术因为其基础性…

sqlserver 创建表,列及表,列描述

-- 创建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 为表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N员工信息表, level0type NSchema, level0name dbo, level1type N…

栈和队列的经典例题,LeetCode 括号匹配问题;栈实现队列;队列实现栈;队列带环问题

1.前序 又有很久没有更新文章了&#xff0c;这次带你们手撕几道基础题&#xff1b;真的就和康纳吃饭一样简单&#xff01;&#xff01;&#xff01; 如果还不会队列和栈的可以去看看之前写的博客&#xff1b; 栈的实现 队列概念以及实现 <- 快速传送 目录 1.前序 …

优化css样式的网站

一、按钮的css样式 https://neumorphism.io/#e0e0e0https://neumorphism.io/#e0e0e0 二、渐变样式 Fresh Background Gradients | WebGradients.com &#x1f48e;Come to WebGradients.com for 180 beautiful linear gradients in CSS3, Photoshop and Sketch. This collect…

Redisson-分布式锁单Redis节点模式

Redisson-分布式锁单Redis节点模式 为什么要用分布式锁&#xff1f; 使用分布式锁的主要目的是为了解决多线程或多进程并发访问共享资源时可能出现的竞争条件和数据一致性问题。举一些实际场㬌&#xff1a; 数据库并发控制&#xff1a;在分布式系统中&#xff0c;多个节点同…

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…

抖音运营_如何做出优质的短视频

目录 一 短视频内容的构成 1 图像 2 字幕 3 声音 4 特效 5 描述 6 评论 二 短视频的热门类型 1 颜值圈粉类 2 知识教学类 3 幽默搞笑类 4 商品展示类 5 才艺技能类 6 评论解说类 三 热门短视频的特征 1 产生共鸣 2 正能量 3 紧跟热点话题 4 富有创意 四 短视…

计算机网络套接字知识(非常详细)从零基础入门到精通

本节重点 认识IP地址, 端口号, 网络字节序等网络编程中的基本概念; 学习socket api的基本用法; 一、预备知识 1.理解源IP地址和目的IP地址 ⭐在IP数据包头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 思考: 我们光有IP地址就可以完成通信了…

spring boot 集成mongodb

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.2.0.RELEASE</version></dependency>配置db: spring:data:mongodb:host: 127.0.…

【C++高阶(一)】继承

目录 一、继承的概念 1.继承的基本概念 2.继承的定义和语法 3.继承基类成员访问方式的变化 ​编辑 4.总结 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 1.派生类中的默认构造函数 2.派生类中的拷贝构造函数 3.派生类中的移动构造函数…