您的位置:首页 > 编程语言 > C语言/C++

浅析补码

2016-08-27 15:39 441 查看
计算机为了表达正负整数,把最高位单独拿出来,0代表正、1代表负,于是乎为了简化符号位带来的运算复杂,出现了补码。

 

理解补码必须首先理解模:

1)前提:表达整数的最小绝对值为0;

2)钟表的表盘分成12等分,把12点看做0点,时针所在的位置总共有12种情况(0~11),12就是模。

3)8位数可以表达二进制为0000 0000~1111 1111(即十进制的0~255)的数值,也就是二进制1 0000 0000(即十进制的256)种可能性,256就是8位数的模;

 

负数的补码=模-负数的绝对值

1)单从钟表时针的位置而言,从12点位置往前拨6格是6点位置(0 + 6 = 6),往后拨6格还是6点位置(0 - 6 = 6),是因为0 - 6 = 0 + (-6) = 0 + (12 - |-6|) = 0 + (12 - 6) = 0 + 6 = 6;

2)对8位整型而言,以二进制表示:

负数=1 0000 0000 - 负数的绝对值 =
1 + 1111 1111 - 负数的绝对值 =
1 + (1111 1111
- 负数的绝对值)
= 1 +
(负数的绝对值按位取反)


其实课本上说的把负数的绝对值取反再加上1就是这个意思。

 

这样可以得到几个负数的补码:

-128 = 256 - |-128| = 256 - 128 = 128,即2进制的1000 0000;

-1 = 256 - |-1| = 255,即2进制的1111 1111。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# c++ C