放假这几天,重新学习了原码反码和补码的相关知识。对原码反码和补码有了重新的认识。所以写了这篇博客,作以总结。
学习原码反码补码时主要是看了叶子秋前辈的博客(http://www.cnblogs.com/zhangziqiu/ )。对于原码反码补码的知识写的非常详细,也引用了很多例子。通过前辈的博客,了解到一个叫做机器数的东西,就是我们常用的二进制数,比如在8位二进制中,数字1的机器数就是00000001。通过真值,明白一长串二进制符并不完全代表数字。开头的01表示这个·数据的正负。
原码,就是符号位加上真值的绝对值, 用第一位表示符号, 其余位表示数值. 如果是8位二进制“+1”表示为00000001,“-1”表示为10000001。这样得出原码的取值范围是[-127,127]。但原码有一个问题。符号位参与运算会使整个数值发生错误会使1-1=-1.所以科学家开始思考,试图找到一种正确的方法,反码就出现了。
反码,顾名思义,把原码反过来。因为机器数只有01,用所有的1代替原码中的零,这样“-1”就可以表示为11111110.同样,反码也有自身的缺陷,在运算中会出现+0,-0的现象。我们都知道0只有一个,没有正负之分。为了这一个看似小,却也十分重要的问题。补码应运而生。
补码,也很好理解,就是补充。在反码的基础上进行补充,进行+1.这样一做,就完美的避免了+-0的问题。这也相当于用-128代替-0,因此补码的范围就是[-128,127].相比于原码和补码,可以储存的数据更多,减少了很多不需要的问题。也正是因为计算机的二进制运算,才会产生反码,补码这种针对于负数的解决方法。从而使得数据运算可以更加准确。
原文地址:https://www.cnblogs.com/Excusezuo/p/9744575.html