这篇文章对二进制做了非常深刻的解释,所以转发到这里供以后回顾。另外,这里推荐另一篇文章,加强学习体系的转换。
-128的8位补码是:1000 0000B,翻译成十进制的128。
负数的补数按“模数”计算,即:
[X]补码= 256-| x | = 256-|-128 | = 128。
不要用“逆加一”来计算,这只是一个经验公式。
1.逆代码的范围
反码表示规定正数的反码与其原码相同。负数的求反是对其原始代码的逐位求反,符号位除外。
在规定中,8位二进制码所能表示的反码的范围是-127~127。
-128没有反码。
那么,为什么规定-128没有逆码呢?下面解释一下。
首先看-0,[-0]原码=1000 000,其中1是符号位。根据逆码规定,计算[-0]逆码=1111 1111,
看-128,[-128]原码=1000 000,如果Jean -128也有它的逆码,根据逆码,[-128]逆码=1111 1111,
你会发现-128的逆码和-0是一样的,所以为了避免混淆,不能有-128带-0,这是逆码法则决定的。
二。原代码补码的范围
8位二进制数。
原代码-127~127 -128呢???你不是说-128原码是1000 0000吗??
逆代码-127~127
补体-128~127
对于n位二进制数:
你会发现比其他代码多了一个补码。为什么?问题是0。
[0]原始代码=0000 0000,[-0]原始代码=1000 0000。
[0]补码=0000 0000,[-0]补码=1111 1111
[0]补码=0000 0000,[-0]补码=0000 0000。
你会发现0和-0的补码是一样的。也就是说,0的补码只有一个表示。
这里解释一下[-0]补码是怎么得到的。
负数的补数是整个补数加一。标志上写着“丢弃”。(因此,放弃符号位的补码的第一位是数值位,而不是符号位,并且符号位被放弃)
另外解释一下原码的符号位和补码的符号位的关系。补码的符号位不保持原代码的第一位不变,但符号位保持不变。[-0]补码的第一个1是符号位,尾数中的七个1是数值位。尾数加1后,数字位进位,111 1111 1 1 = 1 0000 000(在计算补数的过程中,
所以补码可以表示的数比原码少一个,所以补码可以多表示一个真值为-128的数。
但many代表的数-128比较特殊,只有原码和补码,没有逆码。
-128的补码是1000 0000。
Java学习交流群:737251827
三。为什么-128的补码是1000 0000?
8位二进制的原值表达范围是:-127到127。
从0000 0000到1111 1111共有256个组合序列。原始值28不能用8位表示。
从以下两个角度理解-128的补码为什么是1000 0000。
(1)从补语的意义上理解。
因为:256-128的补数= 256(-128)——机器里只有加法。减法变成了补数的加法。
而256-128=128,所以256的补数(-128) =128,所以(-128)的补数=256-128 =128。数学上128 = 1,000,000,所以-128的补数是1,000,000。
注意:只是规定,下面还有理由。
8位二进制补码组合序列中有256 0000000–0111 1111 0 ~ 127 1000 0000。我们能做什么?
1000 0001 – 1111 1111 -1~-127
再看这个规则表。原始代码补码值是0111 1111 0111 1111 127 0111 110 1110 126.....补码总是-1...0000 0000 0000 0000 0000 10001 1111 1111-1 1000 0010 1111 110-2 1000.011 1111 1101-3 ..................................................................................................................................................................
所以有1000 0000 as -128的补码,和上面的数学表达式一致。
这样,负数的补数将很容易在机器中计算出来。
计算方法是:取负数的绝对值,然后用二进制表示绝对值(不考虑符号位!)二进制数反加一得到负数的补数(也就是补数运算!)128的绝对值是128 128,二进制表示是:1000 0000逆0111 1111加1 1000 0000。这是-128的补码。用这种方法计算的结果符合“规定值”。
四。
1 = 8位,所以它能代表的最大数当然是8位都是1(由于二进制数只能是0或1,如果是我们常见的十进制,那么8位都是9。所以,你应该明白了吧?)
在1字节的二进制数中,最大的数是11111111。
双字节有16位。1111111111111111。双字节的最大数量是:
1 * 215 1 *214 1* 213 1 * 212 1 * 211 1 * 210 …… 1 * 22 1 * 21 1* 20 = 65535
负数在计算机中是如何表示的?
关于这一点,你可能听到了两种不同的答案。
一种是教科书,会告诉你计算机用“补数”表示负数。但是,一说到“补语”这个概念,就需要上一课了。我们需要在第六章讨论二进制的一切。还是那句话,用“补数”来表示负数,其实就是一个公式。公式的作用是告诉你如何计算问题的答案。但是没有告诉你为什么用这个公式可以得到答案!这就是让我困惑的地方。
郑重声明:本文版权归原作者所有。转载文章只是为了传播更多的信息。如作者信息标注有误,请第一时间联系我们修改或删除。谢谢你。
转载:感谢您对网站平台的认可,以及对我们原创作品和文章的青睐。非常欢迎大家分享到个人站长或朋友圈,但转载请注明文章来源“蝶芒网”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)