二进制中补码的最小负数为什么是10000000?怎么来的?解释的详细一点
发布网友
发布时间:2022-04-23 19:08
我来回答
共4个回答
热心网友
时间:2023-10-14 07:26
书上给出的这个二进制数是一个补码,按照补码的定义中所讲,一个负整数中补码计算是2^(N+1)+X(X代表的是二进制的真值)
你说的这个前提是给整形变量分配的是1个字节,就是共8位,最前面一位是符号位,1 0000000,这个时候按照定义来算,2^(7+1)+X=1 0000000,2^(7+1)即10 0000000,1 0000000减10 0000000刚好为真值(真值是有符号的)-1 0000000,也就是-128。我觉得这个临界值只能按照定义来看,如果按照这个补码取反再加一,算完如果把最高位舍去就成了00000000,
还有就是补码的出现本身就是为了使得计算机用加法代替减法,10000001(补码)代表-127,01111111代表+127,如果+127再加1,符号位就成1了,这肯定不行啊,所以最大就是+127,那在10000001和01111111之间的1 0000000只能是负数里的,把它规定为负数刚好又能使计算机解决一个麻烦(计算中减法不就是加负数么,把负数用补码表示实际就是让计算机做了加法,这个说法就是说把计算机和时钟的那个说法中涉及的,可以查阅资料),所以1 0000000也必须用来表示-128。
热心网友
时间:2023-10-14 07:26
原码有两个0值(0000 0000与1000 0000)
改为补码后只有一个0值了,即0000 0000。
8位二进制能表示的数的总个数没有变,而补码正数的表示方法较原码没有发生改变。所以原码里的另一个0值的数的位置给了负数,所以补码的负数就比原码的多了一个。
也就是说补码的最小值比原码的最小值还要小1,所以你当然不能用原码的最小值转换得到补码最小值咯。
你可以将1000 0000(补)转换为原码验证一下。
热心网友
时间:2023-10-14 07:27
符号位 1 代表负数,其他各位组成的数越小,整个负数越小
热心网友
时间:2023-10-14 07:27
八位的补码,共 256 个。
其中 128 个,代表负数:-1~-128。
最小的,不就是-128 吗!
另外 128 个代表:0~+127。
-------------------
负数的八位补码,定义式如下:
[ X ]补 = 2^8 + X
按照定义式,就是:
[-128]补= 256 + (-128 )
= 128 (十进制)
= 1000 0000 (二进制)