本文随便聊一下计算机表示数据的方式,也算是总结一下以便未来回顾。若有纰漏错误请高人指点、共同进步。编码
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的比较,很容易进行比较出来大小方便对齐最大幂进行运算。因此移码的思想就是这样由来的。code