为什么一个字节的存储范围是-128-127或者0到255呢。
分析:1字节8个位,
0000 0000 - 1111 1111 表示0 - 255
那么按照道理说,如果第一位表示正负的话,应该这么表示
0 0000000 - 0 1111111 表示 0 - 127
1 0000000 - 1 1111111 表示 -0 - -127
应该是从-127到+127的呀。
那么-128到127是怎么来的呢?
这里涉及到二进制补码的问题。
如上理解的话,+0,-0则重复了,浪费了一种存储的可能性。
因此,计算机猴子那个的负数,不是照着后面的绝对值(符号位后面的所有位)直接乘以-1得到的。而是用补码规则换算的。
负数 = 绝对值位 - 128
比如,对于1 1111111 = 127 - 128 = -1
同样,对于 1 0000000 = 0 - 128 = -128
因此,最终结果,应该是-128 到 +127之间。
————————————————————————————————
————————————————————————————————
总结:
-
1个字节,8个位,范围:
无符号:0 - 2^8 - 1 ==> 0 - 255
有符号: - 2^7 ~ + 2^7 -1 == > -128 ~ + 127 -
2个字节,16位,范围:
无符号:0 - 2^16 - 1 ==> 0 - 65535
有符号: - 2^15 ~ + 2^15 -1 == > -32768 ~ + 32767
一般而言,设某类型N字节,则有8N位,
无符号:0 - 2^8N - 1
有符号: - 2^(8N - 1 ) ~ + 2^(8N - 1 ) -1
网友评论