分三个部分介绍
注意,在32位和64位机上,int
和pointer
的位宽是不一样的。
存储的地址开始的地方是低字节
大端:低位数据存到高字节。(看起来和原来一样)
小端:低位数据存到低字节。(看起来作了反转)(IA32、x86-64都是小端)
只需要考虑指令中立即数的顺序。
Ailgnment:要求数据的地址是相应的地址边界。(宽度的整数倍)
相关运算细节
当有符号和无符号同时出现时,将有符号转化为无符号。
不注明的情况下都表示有符号的!!!
注意sizeof
返回的是无符号整数类型!!!
无符号拓展直接补0、截断直接截
有符号拓展复制符号位、截断直接截。有符号截断相当于取余
无符号加法和有符号加法遵循同样的规则,都是用加法器完成
加法器根据Sub值做加法或减法,对结果不判定对错,生成标志位信息
标志位信息:
变量与常数的乘除可以用位移运算和加减运算代替。(除法结果永远是向下取整)
负数用位移代替除法时会出问题。需要做修正算法(目的就是让结果向上取整而不是向下取整,最终要达到向0取整的效果)
取负操作、源码-补码、补码-源码永远是按位取反后加1。
注意对于有符号的取反操作,一般是数值加负号,但最小值加取反仍是最小值。
目前所有计算机都支持IEEE(电器和电子工程师协会)浮点标准。
IEEE浮点标准用这个形式表示一个数 V = ( ? 1 ) s × M × 2 E V = (-1)^s\times M\times 2^E V=(?1)s×M×2E
名称 | 占字节数 | s | exp | frac |
---|---|---|---|---|
float | 4 | 1 | 8 | 23 |
double | 8 | 1 | 11 | 52 |
给定的位表示,根据exp的值,编码被分成3种不同的情况
采用向偶数舍入的方式,实际上提供了四种方案,这种最接近原始值
我们将最低位0认为是偶数,1认为是奇数。
浮点运算缺少重要的群属性(无结合性)
int->float
会有精度损失int->double
不会有精度损失(只要int宽度小于53)!!