快速简单地求负数的补码和求补码代表的负数

    技术2024-12-06  15

    快速简单地求负数的补码和求补码代表的负数

    作者:王涛 taoge007@sina.com

    QQ : 269676924

    时间:201129日 

    特点是:快速简单实用,不用教科书的取反加一之类的麻烦方法。

    //1 这是我认为必要的基本知识

    补码,是整数数字数据在计算机内部的存储格式。

    整数分为正数,0,和负数。

    1位二进制数字可以表示2个不同的状态,

    2位二进制数字可以表示4个不同的状态,

    3位二进制数字可以表示8个不同的状态,

    (此处省略4行字,自己想吧。)

    8位二进制数字可以表示256个不同的状态。

    8位二进制数字也叫一个字节。

    一个字节表示的整数范围是:

    -128 -127 -126 .... -1      //  128个负数,

     0,                   //  0不分正负,只有一个

    和 1 2 3 ...到 127        // 共 127个正数。

    也就是总共256个数字。

    // 2 以上是基本知识,下面才是重点。

    1111  1111 

    这显然是负数的补码,因为最高位是1。最高位也叫做符号位。

    为什么最高位是1就是负数的补码呢?这个大有学问。此处省略一万字。

    是不是最高位是0就是正数呢?这个不一定。骑白马的不一定都是王子,唐僧有时候也骑白马。唯一的例外就是: 数字的最高位也是0.

    这个补码代表的负数是多少呢? // 这个才是重点。。

    只要两步,就可以解决这个问题。

    第一步:把这个补码当作无符号数来读取。得到结果是255

    第二步:把第一步的结果减去256,得到的差就是所求的负数。 255-256= -1

    所以这个补码是-1的补码。

    再给一个例子:1000 0000  // 任意一个负数的补码都适用的。

    第一步:128

    第二步:128-256= -128 

    原来这就是 -128 的补码啊!

    这里是1个字节,减去的应该是28次方,

    如果是2个字节,减去的应该是216次方,

    如果是4个字节,减去的应该是232次方。

    那么 反过来怎么办呢?如求 -128 的补码。

    只要把我说的那两步反过来就好了。

    第一步:负数加上 256      -128+256=128

    第二步:把上面的结果用二进制表示  1000 0000  这就是负数的补码

    最新回复(0)