86570791 2019-06-28
本文随便聊一下计算机表示数据的方式,也算是总结一下以便将来回顾。如有纰漏错误请高人指点、共同进步。
1*2^7 + 1*2^1 = 130
显然不是2。因为首位是1,所以为负值,然后计算后面位按权展开结果为-2。符号位不变其余位取反后+1
。如果计算1+(-1)那么结果是00000001(+1原码)+10000001(-1原码) = 10000010(原码) = -2
很明显结果是不对的。1+(-1)= 00000001(原) + 10000001(原) = 00000001(反)+11111110(反) = 11111111(反) = 10000000(原) = -0
注意这里的0是有符号位的是个负值。这与我们数学运算规则不符(虽然现实中0不分正负但是计算机中正确结果应该是+0)移码主要是为了便于计算机运算指数而引进的,比我们运算一个加法1.1*2^-1 + 1.2*2^3
,根据运算规则来讲底数2相同时,需要先把指数处理为相同时才能进行1.1和1.2的加法运算。0.00011*2^3 + 1.2*2^3
这样运算就简单多了。所以为了进行运算就需要比较指数部分,指数-1和3进行比较是如果是原码编码的方式去处理,就会形成10000001和00000011进行比较的结果,显然这么一比是-1>3的,计算机无法进行准确运算。如果用移码的形式,比如让指数-1和3同时+4,就成了3和7的比较,很容易进行比较出来大小方便对齐最大幂进行运算。所以移码的思想就是这样由来的。