第2章 信息的表示和处理

2.1 信息存储

2.1.1 十六进制表示法

一位十六进制数可以表示4位二进制数。

2.1.2 字数据大小

64位机器地址(指针)都为64位。
1个字节8位;1个字2个字节。

2.1.3 寻址和字节顺序

小端法:最低有效字节在前面,即与我们书写数字的方式相反。Intel x86都用小端模式。
大端法:最高有效字节在后面,与我们书写数字的方式相同。

2.1.4 位级运算和逻辑运算的差别

位级运算返回值与参数相关,逻辑运算只返回0(false)和1(true),所有非零数在逻辑运算中都认为是true。

2.1.5 移位运算

算数左移等价于逻辑左移。
算数右移补符号位,逻辑右移补0。
几乎所有编译器都对有符号数使用算数右移。

2.2 整数表示

2.2.1 整型数据类型

有无符号(有符号无表示,无符号unsigned)
长短(short 2字节,int 4字节,long 4或8字节)在C语言中可以随意组合。

2.2.2 无符号数的编码


没有符号位,每一位都为值。

2.2.3 补码编码


除了第一位为符号位,其余都为值。

2.2.4 反码编码


与补码的差别是正负数范围不同,反码正负数对称,补码正数比负数少1。
反码有-0(10000000),在补码中为-128

2.2.5 原码编码


负数与正数除了符号位没差别。

2.2.6 编码转换

正数都相同。
负数:原码只改符号位;反码符号位为1,其余位为正数按位取反;补码为反码+1。

2.2.7 有符号数和无符号数转换

对于位的转换,正数不变,负数,反向转换则正数不变,负数。

2.2.8 扩展

无符号数0扩展,有符号数符号扩展。

2.2.9 截断

截就完事了。截完后使用对应的公式得出值(无符号数,有符号数的补码表示)

2.3 整数运算

2.3.1 无符号数加法

加就完事了,竖式懂不懂?
加完判断下溢出:
加完后的值比x,y中任意值小则为溢出。

2.3.2 补码加法

加就完事了,竖式懂不懂?
加完判断下溢出:
正溢出
负溢出

2.3.3 补码的非

最小值不变,其余值按位取反+1。最小值其实也是取反+1。

2.3.4 无符号乘法

乘就完事,乘完截断。

2.3.5 补码乘法

截断后使用对应的公式获得值。
从位级表示来看,补码运算和无符号数运算没有差别,但同样的位级表示,在补码中表示不同的值。

2.3.6 乘以常数

将常数拆成2的幂运算,然后使用移位代替乘法。如,,。

2.3.7 除以2的幂

无符号数右移,补码加上偏置后右移。偏置为

2.4 浮点数

IEEE浮点标准:
32位:1位符号,8位exp,23位frac
64位:1位符号,11位exp,52位frac

1.规格化数

exp既不全为0也不全为1。


f和M都是小数,差别是f以0开头,M以1开头。
+1的操作使规格化数无法表示0。

2.非规格化数


为0000时飞规格化数的权重与阶码为0001时的规格化数的权重都为,使最小的规格化数和非规格化数平稳过度。

你可能感兴趣的:(第2章 信息的表示和处理)