1.signed的正数范围比负数范围小1?比如有符号的char的范围是-128-127,为什么?
因为计算机使用补码来表示负数!尽管c语言标准并不要求用补码来表示,而java终明确规定补码表示
而补码规定10000000是用来表示-128,不是用来表示-0
2.如何从补码计算出他代表的十进制数值?
举例说明:
01010100(补码) = 2的六次方+2的四次方+2的2次方=84
1
1010100(补码) =(负1*2的七次方)+2的六次方+2的四次方+2的2次方=负64
即:最高位如果是1,那么是(-1)*2的N次方,最高位是符号位,同样用来计算!
即:最高位如果是1,那么是(-1)*2的N次方,最高位是符号位,同样用来计算!
3.范围如何计算出来的?
在unsigned无符号表示的时候,没有负数,所有的位都来表示大小,故数值大小从00000000-11111111 (都以八位为例子)即:0-255
对于有符号位:最高位如果是1,表示负数;0表示正数
所以11111111-10000000即:-1到-128
00000000-01111111 即:0-127