大家好,欢迎来到IT知识分享网。
我们知道数字是带符号的,在十进制里面有-10和10.在二进制里面也有,不过我们的符号也需要使用二进制来表示。毕竟计算机通过电流来表示0和1,那么我们的语言里面的符号“+”和“-”也需要转换成计算机认识的语言。
通常在二进制高位第一位”0“代表的是“+”,“1”代表的是“-”
接下来我想分享的是二进制的原码、反码、补码。他们在运算时有着不同的作用。
原码
原码,就是我刚刚说的,在二进制数之前,加上0或1。高位第一位”0“代表的是“+”,“1”代表的是“-”。
例如:十进制8的二进制是1000,原码为01000,-8的原码表示为11000。这样我们就可以辨认8的正负情况。对于小数也一样,比如0.1011,如果是正数,就用0.1011,如果是负数,1.1011。
用原码表示,有点在于直观与利于转换。但是有着不可避免的缺点:计算不方便,因为用数字代表正负,计算时我们需要判断符号带来的计算情况。在这种情况下,反码和补码就发挥了它易于计算的优点。这样可以简化逻辑电路。
反码
对于反码和补码,我们的注意力都要放在负数上面,因为是负数给我们带来计算不方便的情况(我个人理解)。反码符号也是用“1”表示。但是它的数值需要取反,这是它的名字由来。
例如:
十进制-8的原码是11000,反码是10111
十进制8的原码是01000,反码是01000
十进制-10的原码是11010,反码是10101
十进制10的原码是01010,反码是01010
用反码表示的话,我们如何运算呢?两数的反码的和等于两数和的反码,符号位也需要参与计算。不知道小伙伴们是否和我一样有一个疑问呢?如果进位的怎么办?
当符号位产生进位时,也需要参与循环进位:进位加到和的最低位上
我给大家演示一下:
计算+1001与-0101的和
其实反码已经可以满足我们计算的需求了,但是遇到进位的情况计算机不可能也和我们一样可以在草稿纸上循环进位吧,我们可不可以帮计算机减轻负担呢?
补码
补码就是我们为了避免循环进位,减轻执行加法的运算时间,用的更完善的表示法。
对于负数用补码表示:补码在反码的基础上最低位加1
你是不是和我一样也没搞懂呢?这里需要引入一个“同余”的概念。我的理解也不是很深,但把它带入时钟里面。比如下午两点可以用2与14表示,这里的模是12。
把这个知识点带入计算机方面(由于我感觉自己说不太清楚,引入一个资料图片):
我们看看-8与-10的补码表示方法:
-8的补码表示:11000
-10的补码表示:10110
我们正好看看的计算的情况:
OK,如果你不实践的话,感觉自己已经理解了原码,反码和补码了,但是如果你按照这个方式计算-8与-10的结果试试?你会怀疑自己的计算能力吗?
我演示一遍:
两个负数相加等于正数吗?如果你和我遇到这个情况,肯定会以为自己计算失误。其实不然,这是计算机溢出的情况,我们如何解决呢?
变形码
变形码是将原来一位表示的符号用两位来表示,00和11。这是帮助我们判断是否溢出的。
在计算时如果符号位依旧是00或者11,说明结果正确。
如果符号位是01表示有正溢出,10代表有负溢出,你就看左边是1还是0来判断是什么溢出就可以了。
我借用资料里面的例子给大家展示一下:
OK,本次分享到此结束,希望对大家有用,
Fight!!(o^-^)尸~”☆ミ☆ミ
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/158791.html