大家好,欢迎来到IT知识分享网。
目录
最近在学习一下专栏里面的数学问题,提到二进制的东西的时候,想到了大多数人在学习的时候,死记硬背上反码是怎样,补码是怎样。
现在回头问下自己,反码有何存在意义?补码有何存在意义?为什么要有反码?为什么要有补码?
1、前言,自己发明javb语言
因为位数太长,所以以下说明的时候不太方便,假如我现在发明了了,jbvb语言,接下来整篇分析里面,
2、模
那这里的模是2^4 = 16
7 + 1 = 0111 + 0001 = 1000 = -8 ,上溢出,超越上限,也就是最大值+1后 会变成最小值。
还剩15的差值,-8 + 8 能回到0位置, 0+7 能回到7的位置。也就是说 7 + 模后,重新回到原来的位置。
就是余数和取模的概念,这东西周而复始,其实跟时钟类似。
类似时钟机制,假如现在是6点,顺时针加12个小时,这样就回到了6点。
3、先思考,为什么不能直接用源码计算
4、主角的由来
由前面可知,数值加上模后会回到原来的位置。
由此将i-j + 模的值等同于 i – j , i-j=(i-j)+(2^n-1+1)=i+(2^n-1-j+1)
2^n-1-j ,结果如下图,
这个东西刚好是-1,除符号位外的取反。称为反码
2^n-1-j+1,补码,反码加1
所以-1最终的补码与1相加 ,得到正确的值
5、反应肯定是???
这里的计算算的刚好,这里我看其他人也有相同的迷惑。
作者的解答是:我们只考虑(n-1)位的1,不考虑第一位
现在想必大家都理解了。如果强制加上符号位,那么和j的值是对应不上长度的。所以把第一位去除直接计算。
这个公式刚好就这么巧解释了整个补码的由来。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/101898.html



