二进制补码

———–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而言,84互为补数)

 
 

在二进制中,正数和对应的负数相对于

2n
来说,互为补数

〔即
模的二进制减去正数的二进制补码即为负数的二进制补码〕

 
 

 
 

 
 

另:负数补码的其他求法

 
 

1)负数补码
=
2n

对应正数的补码

2)将对应正数的二进制补码进行比特反相运算,再将结果加1

3)先写出对应正数的二进制补码:

先由最低比特开始找。
若该比特为0,将补码对应比特填0,继续找下一比特(较高的比特)。
若找到第一个为1的比特,将补码对应比特填1。
将其余未转换的比特进行比特反相,将结果填入对应的补码。

 
 

 
 

 
 

 
 

特别的数字:

有二个数字的补码等于本身:一个是0,另一个为该比特可表示最大绝对值负数(即1000…)

 
 

 
 

 
 

为什么补码能这么巧妙实现了正负数的加减运算?

 
 

因为:指定n比特字长,那么就只有
2n
个可能的值,加减法运算都存在

上溢出与下溢出的情况,实际上都等价于模
2n 的加减法运算

 
 

这对于n比特无符号整数类型或是n比特有符号整数类型都同样适用

 
 

 
 

 
 

 
 

 
 

【made by siwuxie095】

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注