在这个小节中,我们要学习带符号整数的最后一种编码方式,叫做移码。
怎么得到移码
?
很简单,在补码的基础上,符号位取反就可以得到移码。
正 19 和负 19 的原反补码分别是这么表示(如下图),要得到移码,只需要在补码的基础上把符号位取反就可以。
因此,只要我们先得到补码,那就可以快速的转换为移码。
值得一提的是,移码只能用于表示整数,像原码、反码、补码它们是可以用于表示小数的。
之后的小结,我们会说怎么用原反补码来表示小数。
现在我们先来讨论移码。译码和补码一样,它只有一种真值 0 的表示形式。
同时,移码的合法表示范围和补码也是相同的,相比于原码和反码来说,移码可以多表示1个负数。所以如果是8比特的移码,它的合法表示范围就应该是负的 128 到正的 127 这样的范围,这就是移码。
我们把负的 128 到正的 127 区间内的补码和移码放在一起进行对比。,大家先观察一下有什么规律。
你会发现真值最小的移码,它刚好是全 0 。
接下来真值第二小的刚好是 7 个0加1个1;真值最大的移码,它刚好全部为1。
如果按无符号整数来解读,刚好就是无符号整数的0,一直到无符号整数的255。
所以按照移码的这种规律,可以使得如果用硬件电路来对比两个移码的大小,会非常方便。
所以移码通常会用于浮点数的阶码当中。
浮点数是什么以及阶码是什么,我们之后进行学习,现在先不用管。
我们现在先关注移码的特性,以及它和补码之间的关系。
我们把移码的表示范围,还有 0 的表示,最小的值,最大的值如何表示,也都整理到之前的表当中,大家可以放在一起进行对比。
如下:
另外,在这个表当中,我们也把 8 个比特的机器数, 8 个全0一直到 8 个全1。这些机器数如果按无符号数来解释,按原码解释,按反码解释,按补码解释,还有按移码解释,分别对应真值的多少,都在表里边进行了整理。如下:
最后给大家留几个练习。
(1)大家尝试着把带符号的定点整数50,还有-100 分别用8位的原反补移码来进行表示。
大家自己试一试就行,答案如下:
(2)如果给你8比特的这些编码,同时告诉你编码的方式。大家尝试着把这些编码转换为对应的真值。
答案如下:
关于移码具体有什么作用,我们还会在浮点数当中学习。
这个小结中我们主要掌握的就是移码和补码之间的转换,以及移码的一些特性。
以上就是这一小节的全部内容。