CSAPP第三章学习笔记

CSAPP第三章学习笔记

Bits,Bytes,and Integers cont

1.无符号整数基本运算规则:

当两个无符号整数相加超过了该整数所用位数的最大值时,系统会自动将最高位的n进制数字去除,得到原数减去2^w后的结果,称这个现象为溢出

2.补码整数的基本运算规则:

先将有符号数字用无符号形式表示出来,再进行二进制加法,最后再用补码转化结果

3.补码溢出:

分为正溢出和负溢出.

正溢出:两个正有符号数相加因为超出最大值所以被补码表示为负数

负溢出:两个负有符号数相加因为低于最小值所以被补码表示为整数

4.乘除法:

在超出范围后依旧会发生截断,截断后剩下的低位利用补码的形式计算结果。

在做乘法运算时,编译器会理解为进行移位操作,以便节省更多时间。

在十进制中,乘以10意味着原数据小数点向右移动一位,二进制则以乘以2为单位进行向左移动,移动后超出左侧最高位的依旧被舍弃,除法向右移.

 

当进行乘除运算想要保留符号时,可以采用算数移位,用1填充位(上面的是逻辑移位,用0填充)

 

5.对数字取负(有符号数):

采用取反加以法,对二进制数整体前后调换取反,在加上1(二进制形式相加)

补充:

Java中任何数都以补码形式表示,<<<表示逻辑右移,<<表示算数右移;

而C中没有明确指出(隐式分配)。

size of ()会自动将对象标识为无符号数。

内存中一些数字的底层表示:

可以用三位十进制数来表示十位二进制数,例如:2^10≈10^3

分段错误:操作系统只允许访问者访问一部分内存,如果尝试访问其他内存,将会报错.

一段内存由多个字块表示,内存本身为一系列字节,假设字的地址为最低地址。

假设:一段32位的字,它的最低位为5个0

 

此图不太懂,看下面的大小端序可以看懂()

字节在一段字中的存储顺序:

小端序:第一个字节为最小字节

大端序:小端序反过来

举例:对于一个四字节数存放0x1234567

不同系统对于统一串字所打印出的对应指针不同

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值