8位有符号数:-128~+127,笔记

  • Post author:
  • Post category:其他

n bit有符号数范围是-2^n ~ 2^n -1

例如8bit有符号数:-128 ~ +127,及其原码补码,本文会非常清楚地讲一下这个范围是怎么来的以及它们的原码补码

最高位为符号位,0代表正数,1代表负数,正数原码和补码相同,负数的补码是原码符号位不变其他位取反,再+1,

讲计算规则会一头雾水,用列表的形式给出会清晰很多:

值, 原码(正数补码等于原码)

+127, 0111 1111 

+126, 0111 1110 

+125, 0111 1101 

……
  +4, 0000 0100  

 +3, 0000 0011   

+2, 0000 0010   

+1, 0000 0001 
   0, 0000 0000  
(不区分正负)

值,原码,符号位不变各位取反, 然后+1(即补码)

-1, 1000 0001, 1111 1110, 1111 1111 
-2, 1000 0010, 1111 1101, 1111 1110   

-3, 1000 0011, 1111 1100, 1111 1101   

……
-124, 1111 1100, 1000 0011, 1000 0100 

-125, 1111 1101, 1000 0010, 1000 0011 

-126, 1111 1110, 1000 0001, 1000 0010 

-127, 1111 1111, 1000 0000, 1000 0001 

-128, 1000 0000, 1111 1111, 1000 0000

(1)-128的原码: 从-127的数据位(第0~6位)+1而来,进位被丢弃

(2)-128符号位不变各位取反,得到1111 1111

(3)然后+1得到补码,数据位+1之后,全变为0,进位被丢弃,注意:进位不加到符号位上。

(4)-128的原码看起来是-0,可以这么不确切地通俗地说:用+0表示0,用-0表示-128

(5)计算机中负数用补码来存,正是因为用补码来存,所以存着的数从-128一直到+127看起来是很有规律的:

-128,                  -127,         -126,      … , -2,                       -1,          0,            +1,         … ,    +126,            +127

1000 0000, 1000 0001, 1000 0010, …,1111 1110, 1111 1111, 0000 0000, 0000 0001, …, 0111 1110, 0111 1111

可能写的不对齐,下面是图片:

这样看起来就是直接从1000 0000一直+1(进位加到符号位上),一直加到0111 1111,再加就又变为1000 0000了

  1. 之前说的进位不加到符号位上,是我们定义的从原码计算补码的规则,这个规则就是进位不加到符号位上。
  2. 这里说的从1000 0000 一直+1并且进位加到符号位上,是说从计算机内部储存数据的方式来看,可以看成是这样的一种形式,并且这种形式很有规律。
  3. 有可能在发明之初,就直接让数字从1000 0000到0111 1111排好,然后我们定义前128个数字为-128到-1,后128个数字为0到+127,在这基础上,再发展而来对于符号位,原码,补码的定义。

——————————————————————————————

参考文献 :为什么8位有符号数的取值范围是-128~+127_qq_35212671的博客-CSDN博客


版权声明:本文为weixin_42150026原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。