负数如何转换成二进制、取反

1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128-127。它在计算机中是怎么储存的呢?

可以这样理解,用最高位表示符号位,如果是0表示正数,如果是1表示负数,

剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,

27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,

从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。

到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,

如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。

实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并

不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次

表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,

这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和和它的绝对值所对应的

原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,

如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1

,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111储存的。

总结一下,计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,

正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。

下面再多举几个例子,来帮助大家理解!

十进制 → 二进制  (怎么算?要是不知道看计算机基础的书去)

47   → 101111

有符号的整数    原码    反码    补码

  47      00101111  00101111  00101111(正数补码和原码、反码相同,不能从字面理解)

 -47      10101111  11010000  11010001(负数补码是在反码上加1)

现在知道了吧?

6的原码是00000110

6的反码是11111001

反码+1以后表示负数

11111010

-6取反后为00000101


你可能感兴趣的:(计算机原理)