为什么用补码表示负数, 为什么负数比正数多1?

(1)无符号16位的范围

0000 0000 0000 0000 到 1111 1111 1111 1111

无符号16位整型数据的取值范围是0到65535。

(2)有符号16位范围

正数: 0000 0000 0000 0001 到 0111 1111 1111 1111

十进制数为1到32767

负数1000 0000 0000 0000 到 1111 1111 1111 1111

十进制数为-32768到32767

(3)-1 和 -32768的补码

1的原码: 0000 0000 0000 0001;

取反: 1111 1111 1111 1110;

+1: 1111 1111 1111 1111。

-1的补码为1111 1111 1111 1111。

 

32768的原码:1000 0000 0000 0000

取反:0111 1111 1111 1111

+1: 1000 0000 0000 0000

 

(4)-32769为什么不行

 32769原码: 1000 0000 0000 0001

取反: 0111 1111 1111 1110

+1: 0111 1111 1111 1111

这是什么, 32767

(5)为什么要用补吗显示负数

为了正数和负数相加的时候容易操作吧

比如2+(-1), 用负数直接显示, 就是-3了

用补码呢

(6)为什么有符号负数比正数个数多1个呢?

假如是8位的有符号

正数范围 0000 0001 ~ 0111 1111(1~127)

负数范围1000 0001 ~ 1111 1111(-127~1)

另外首位为0 和 1 分别还有以下组合

0000 0000 和 1111 1111
分别是0 和-128

原本首位为0或者1(正负符号) 后面7位,  对应的组合个数是一样的. 

但是0000 0000给0用了, 1111 1111 给负数用了,所以负数比正数多一个. 

你可能感兴趣的:(c++)