-----------siwuxie095
1、概述
2、补码规则
如下:
(1)
(2)
四位二进制数对应的十进制数补码和非补码表:
二进制数 | 十进制数补码 | 十进制值 |
0000 | 0 | 0 |
0001 | +1 | 1 |
0010 | +2 | 2 |
0011 | +3 | 3 |
0100 | +4 | 4 |
0101 | +5 | 5 |
0110 | +6 | 6 |
0111 | +7 | 7 |
1000 | -8 | 8 |
1001 | -7 | 9 |
1010 | -6 | 10 |
1011 | -5 | 11 |
1100 | -4 | 12 |
1101 | -3 | 13 |
1110 | -2 | 14 |
1111 | -1 | 15 |
3、为什么使用补码
4、补码运算的特征
5、补码运算的原理
小扩展:
正数的原码、反码、补码都相同
负数的反码是在原码的基础上,最高位(符号位)不变,其他位取反
负数的补码是在反码的基础上,再加 1
(也可以直接将此负数对应的正数原码,所有位取反再加 1)
模是指一个计量系统的计数范围,如时钟(计量范围:0~11,模=12)。
计算机也可以看做一个计量机器,它也有一个计量范围,即都存在一个模。
模实质上是计量器产生溢出的量。它的值在计量器上表示不出来,计量器上
只能表示出模的余数(如时钟的模=12表示不出来,不在0~11中)
任何有模的计量器,均可化减法为加法运算(如时钟的顺逆拨动,当时针
在10点,要拨到6点,可以顺拨 8,「10+8=12+6=6」也可以逆拨 4,
「10-4=6」,即在12为模的系统中,减4和加8的效果一样,凡是减4运算
都可以用加8代替,对模12而言,8和4互为补数)
在二进制中,正数和对应的负数相对于模2n来说,互为补数
〔即模的二进制减去正数的二进制补码即为负数的二进制补码〕
另:负数补码的其他求法
(1)负数补码=2n-对应正数的补码
(2)将对应正数的二进制补码进行比特反相运算,再将结果加1
(3)先写出对应正数的二进制补码:
- 先由最低比特开始找。
- 若该比特为0,将补码对应比特填0,继续找下一比特(较高的比特)。
- 若找到第一个为1的比特,将补码对应比特填1。
-
将其余未转换的比特进行比特反相,将结果填入对应的补码。
特别的数字:
有二个数字的补码等于本身:一个是0,另一个为该比特可表示最大绝对值负数(即1000...)
为什么补码能这么巧妙实现了正负数的加减运算?
因为:指定n比特字长,那么就只有2n个可能的值,加减法运算都存在
上溢出与下溢出的情况,实际上都等价于模2n 的加减法运算
这对于n比特无符号整数类型或是n比特有符号整数类型都同样适用
【made by siwuxie095】