教材学习知识点总结
本章研究三种重要数字表示。无符号基于二进制,表示大于或等于零的数字。补码表示有符号整数(可正可负)最常见的方式。浮点数表示实数的科学记数法的以2为基数的版本。
2.1 信息存储
1.大多数计算机使用8位的块,或者字节。作为最小的可寻址的内存单位,而不是访问内存中单独的位。
2.内存的每个字节都由一个唯一的数字来标识,称为虚拟内存的地址,所有可能地址的合集称为虚拟地址空间。
3.进制间转换
1)十六进制转换为二进制:通过展开每个十六进制数字,将它转换为二进制格式。
2)二进制转换为十六进制:首先把它分为每4位一组转换为十六进制,如果位总数不是4的倍数,最左边的一组可以少于4位,前面用0补足。
3)十进制转换为十六进制:辗转相除法取余数并倒排。
4)十六进制转换为十进制:用相应的16的幂乘以每个十六进制数字,如:0x7AF,相应十进制为716^2+1016+15=1967。
4.地址表达式&x的值为0x100,那么x的4个字节将被存储在内存的0x100、0x101、0x102、0x103位置。
5.小端法:最低有效字节在最前面的方式。大端法:最高有效字节在最前面的方式。大多Intel兼容机都只是小端模式。
6.字节顺序成为问题1)在不同类型机器间通过网络传送二进制数据时。2)阅读表示整数数据的字节序列时。3)编写规避正常的类型系统的程序时。
7.布尔代数:
1)~对应NOT,1→0,0→1
2)&对应AND,只有当p=q=1时,才为1
3)|对应OR,只有当p=q=0时,才为0
4)^对应异或,只有当p=0,q=1或p=1,q=0时,才为1
8.逻辑运算符||、&&、!分别对应OR、AND、NOT运算。逻辑运算认为所有非零的参数都为TRUE,而参数0表示FALSE。
9.移位运算有三种:左移、逻辑右移、算术右移。例:x:[10010101],x<<4:[01010000],x>>4(逻辑):[00001001],x>>4(算术):[11111001]
2.2 整数表示
1.有符号型中负数的范围比正数的范围大1。
2.编码
1)无符号数编码:B2U4([1011])=18+04+12+11=11
2)补码编码:B2T4([1011])=-18+04+12+11=-5
3)补码转换为无符号数公式:T2Uw(x)=x+2w,x<0;T2Uw(x)=x,x>=0。例如:T2U16(-12345)=-12345+216=53191
4)无符号数转换为补码公式:U2Tw(u)=u,u<=TMaxw;u-2w,u>TMaxw,其中TMaxw=2(w-1)-1。例如:U2T16(53191)=53191-2^16=-12345
5)无符号数的零扩展:开头添加0。例如:[1011]=[01011]
6)补码数的符号扩展:添加最高有效为的值。例如:[1011]=[11011]
7)截断无符号数:x'=x mod2^k,例如:[1011]=[011]
8)截断补码数值:x'=U2Tk(x mod2^k)
2.3 整数运算
1.无符号数
1)无符号数加法。2)检测无符号数加法中的溢出。3)无符号数求反。4)无符号数乘法。
2.补码
1)补码加法。2)检测补码加法中的溢出。3)补码的非。4)补码乘法。
2.4 浮点数
1.二进制小数:例如二进制数101.11表示数字14+02+11+10.5+1*0.25=5.75
2.IEEE浮点标准用V=(-1)s*M*2E,其中符号s决定这数是负(s=1)还是正(s=0),尾数M是一个二进制小数,阶码E的作用是对浮点数加权,这个权重是2的E次幂。
3.偶数舍入:对于两个可能结果中间数值的舍入效果,将数字向上或者向下舍入,使得结果的最低有效数字是偶数。例如:1.5美元和2.5美元都舍入成为2美元。
4.当参数中有一个是特殊值(如-0、-∞或NaN)时,IEEE标准定义1/-0将产生-∞,定义1/+0产生+∞。
5.浮点加法满足了单调性属性:如果a>=b,那么除了NaN,都有x+a>=x+b。6
教材学习中的问题和解决过程
- 问题1:在除以2的幂的补码除法,向上舍入中,总要添加一个偏量,是为什么?添加的偏量是多少?
- 问题1解决方案:
对于一个无符号数还有一个有符号数的非负数来说的话,除以2的k次幂和把被除数右移k位的结果是一样的,但是对于有符号数的负数来说,就会有一些差错。当被除数是负数的时候,要给他加上2^k - 1这个偏移量,才能够得到正确的结果。所以在计算机内如果除数是2的幂次的时候,是会用向下面的这个表达式的形式去计算除法的:(x < 0 ? x + 2^k -1:x) >> k
- 问题2:NaN是什么意思?
- 问题2解决方案:NaN,是Not a Number的缩写,在IEEE浮点数算术标准(IEEE 754)中定义,表示一些特殊数值(无穷与非数值(NaN))