1. 加法和减法是计算机中最基本的运算,计算机时时刻刻都离不开它们,所以它们由硬件直接支持。为了提高加减法的运算效率,硬件电路要设计得尽量简单。
2.对于有符号数,内存要区分符号位和数值位,对于人脑来说,很容易辨别,但是对于计算机来说,就要设计专门的电路,这无疑增加了硬件的复杂性,增加了计算的时间。要是能把符号位和数值位等同起来,让它们一起参与运算,不再加以区分,这样硬件电路就变得简单了。
将一个整数转换成二进制形式,就是其原码。例如short a=6,a的原码就是0000 0000 0000 0110;更改a的值a=-18;此时a的原码就是1000 0000 00010010。
通俗的理解,原码就是一个整数本来的二进制形式。
正数与负数的原码区别在于符号位(二进制最高位表示,0:正数,1:负数)
谈到反码,正数和负数要区别对待,因为它们的反码不一样。
对于正数,它的反码就是其原码(原码和反码相同);负数的反码是将原码中除符号位以外的所有位(数值位)取反,也就是0变成1,1变成0。例如:short a=6,a的原码和反码都是0000 0000 0000 0110;更改a的值a=-18,此时a的反码是1111 1111 1110 1101。
short a=-100的反码:1111 1111 1001 1011
正数和负数的补码也不一样,也要区别对待。
对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。例如:short a=6,a的原码、反码、补码都是0000 0000 0000 0110;更改a的值a=-18,此时a的补码是1111 1111 1110 1110=1111 1111 1110 1101(负数反码)+1
可以认为,补码是在反码的基础上打了一个补丁,进行了一下修正,所以叫“补码”。
原码、反码、补码的概念只对负数有实际意义,对于正数,它们都一样。
(1)先算这个负数的 正数部分: -5 =>5 => 0000 0101(正数原码) =>1000 0101(负数原码)
(2)计算反码 除了符号位之外全部取反: 1000 0101(原码)=>1111 1010 (反码)
(3)计算补码 反码+1: 1111 1010(反码)=> 1111 1011
例如:-4在计算机存储的二进制
先写出正数4的二进制 0000 0100
a.从右到左 遇到0就填0 b.遇到第一个1填1 c.再左边的全部取反
-4=>1111 1100
留言:如果您对文章中的某个观点有不同的看法,或者有任何补充的建议,我也非常欢迎您的分享和讨论。