每一本计算机教材在讲到有符号数的取值范围的时候,都从没有讲过上下限如何确定的。很多同学学了很多年的计算机,只是简单的记住8位有符号数的取值范围是-128-127。有同学深究为什么不是-128-127或者-127-127?
1. 什么是有符号数
简单说就是区分正负数。
2. 计算机如何表示有符号数?
计算机只能识别0,1代码,在计算机内部表示为高、低电平。所以计算机为了识别正负数,就让最高位来表示数的正负,即最高位为符号位。例如:
十进制的2在计算机内部为:0000 0010
十进制的-2在计算机内部如何表示呢?——用补码表示。
补码求解方式:先取绝对值,然后各位按位求反,最后加1.
-2的二进制可以表示为:1000 0010
取绝对值后:0000 0010
按位求反:1111 1101
补码:1111 1110(-2的补码)
在计算机内部存储为-2的补码:1111 1110
注意:正数的补码是自身,负数的补码求解:先取绝对值,然后各位按位求反,最后加1.
为什么计算机用补码表示负数?——留给大家去探索。
3. 8位有符号数的取值范围下限为什么是-128?
上限容易理解:0111 1111,最高位0表示正数,故为127.
下限不是应该是1111 1111吗?-127. ——对不起,你忘了计算机内部存储的是-127的补码,所以计算机内部表示为:1000 0001(-127的补码)。你是不是发现还可以减1?为1000 0000。注意1000 0000是补码哦。 (1)
-127-1=-128。
我们来算算-128的补码是多少?
先取绝对值128,1000 0000,按位求反:0111 1111 再加1:1000 0000.和(1)的推导正好相符。
所以8位有符号数的取值范围下限是-128.







网友评论