当前位置: 首页 > news >正文

听课笔记CSAPP

概述:这里是csapp2015 fall 听课中的一些笔记。

lecture2

二进制中位的下标,构成的集合

例如:01101001 ,从右到左边下标从0 ~ 7,其中值为 1 的有,{0,3,5,6},这些下标构成一个集合。

下面我们看看这个集合的一些运算,首先给出两个二进制数字如下 a = 0b01101001b= 0b01010101;

将这两数字映射为集合得到 a1 = {0,3,5,6} 和 b1 = {0,2,4,6}

在这里插入图片描述

依此类推:可以得到 | 对应集合中的 并运行 ; ^ 得到两个集合中不同的部分;~ 取补集

位移

只有一种左移,但是有两种右移,分为逻辑右移和算术右移。

左移:低位补0

逻辑右移:高位补0

算术右移:高位补符号位

数字范围

无符号数: 0 ~ 2w−12^w -12w1
Two’s complement : −22−1-2^{2-1}221 ~ 22−1−12^{2-1}-12211

下面这张ppt将映射关系画了出来:

在这里插入图片描述

注意:运算中有一个是无符号数,那么另外一个数也会转换成无符号数进行比较,<,>,==,<=,>= 这些符号如果使用不当,会有意外的bug出现。

在这里插入图片描述

∣TMax∣+1=∣TMin∣ |TMax| + 1 = |TMin| TMax+1=TMin
UMax=2TMax+1UMax = 2 TMax + 1 UMax=2TMax+1

第一个公式,可以看出在补码中的数字表示是不对称的,因为有0的存在;
第二个公式,从原理上理解会清晰,TMax的最高位(符号位)不是1,其余位都是0,UMax是全部为1;2TMax将二进制数字向左移动了一位,+1 是为了将移出来后最低位的0变成1.

bug

int i;
for(int i=n-1;i-sizeof(char)>=0;i--)f(a[i]);

sizeof返回的 unsigned 类型,运算会自动转换成 unsigned,然后会一直大于0,这样这就是一个死循环。

扩展/截断 位数

无符号数,扩展的时候,高位补0;补码在扩展的时候,高位补符号位;

为什么高位补符号位会对数字的大小没有影响?

在这里插入图片描述

扩展一位是这样,扩展多位的时候,依次类推就好。

我们基于这样的原理,能得到很好的结论,当我们看到一堆类似ffff…0123 前面的一堆f只是想告诉我们这是一个负数。

截断

无论是无符号数还是补码,当截去最高位的时候,值的变化都相当于减去最高位。
但是补码有一种情况下是值不变的,那就是最高位为1,最高位的下一位也是1的时候。

大家可以想想为什么?

http://www.dtcms.com/a/456917.html

相关文章:

  • 如何避免消息重复投递或重复消费
  • 卷积层(Convolutional Layer)学习笔记
  • centos7.6系统python3安装IOPaint (原Lama-Cleaner)
  • Shell脚本基础应用
  • 107、23种设计模式之观察者模式(16/23)
  • Linux进程第五讲:PPID与bash的关联、fork系统调用的原理与实践操作(上)
  • 精品购物网站如何创建个人主页
  • 怎样建设电子商务网站wordpress 4.9 中文
  • AI赋能锂电:机器学习加速电池技术革新
  • await
  • 机器学习-常用库
  • 前端网络与优化
  • (二) 机器学习之卷积神经网络
  • GAN入门:生成器与判别器原理(附Python代码)
  • 企业网站seo报价校园门户网站开发需求
  • RabbitMQ核心机制
  • 四、代码风格规范
  • 做网站采集青岛做教育的网站建设
  • Ethernaut Level 8: Vault - 私有变量读取
  • 去水印擦除大师 3.7.6 | 专门用于去除视频和图片水印的工具,支持多个热门平台无水印下载
  • 关键词排名优化网站东营交通信息网官网
  • 【URP】Unity[内置Shader]复杂光照ComplexLit
  • 【Linux】vim的操作大全
  • Web Worker:释放前端性能的“后台线程”技术
  • 机械行业网站建设方案电商公司有哪些?
  • 赋能智能制造领域:全星QMS质量管理软件系统深度解析
  • java返回参数报错
  • cesium126,230217,Pixel Streaming in Unreal Engine 像素流 - 1 基本概念:
  • JavaScript基础知识
  • 以太网数据报文各协议字段深度解析(第一、二章)