正负数的源码、反码、补码相互转换
⼀、正数
  正数的源码、反码、补码都是相同的。
⼆、负数
 1、负数的源码与反码的相互转换
    负数的源码转换为反码:符号位不变,数值位按位取反。
    例如: 
负数二进制补码运算法则
源码:1000 1100
反码:1111 0011
    负数的反码转换为源码:符号位不变,数值位按位取反。
    例如:
反码:1011 0101
源码:1100 1010
 2、负数的源码和补码的相互转换
   负数的源码转换为补码:1、先转换为反码(符号位不变,数值位按位取反)2、在反码的基础上末位加⼀。
  例如:
源码:1010 0101
反码:1101 1010
补码:1101 1011
   负数的补码转换为源码:符号位不变,数值位按位取反,末位加⼀。
   例如:
补码:1110 1011
补码取反:1001 0100
源码:1001 0101
3、负数的反码和补码的相互转换
   负数的反码转换为补码:末位加⼀
  例如:
反码:1100 1110
补码:1100 1111
  负数的补码转换为反码(源码的反码):末位减⼀
  例如:
补码:1100 1110
反码:1100 1101 (借位减)
4、正数取反
  先将正数源码按位取反,得到⼀个负数,由于负数以补码形式存在,再转换为负数的反码,最后末位加⼀得到补码。  例如:
0000 1100 #源码
1111 0011 #正数取反得到负数的源码
1000 1100 #负数的源码取反后得到反码
1000 1101 #反码加⼀得到补码
5、计算机存储数据以补码的形式(原⽂链接:)
数据是以⼀串⼆进制的数字储存在计算机中,⽽数据转化为⼆进制的数值就是称为原码。⽐如说整数10的原码为0000 1010(⼋位⼆进制),其中最左边的⼀位作为符号位,值为0即为正数,值为1为负数。
但是如果直接以原码的形式存在计算机中,那么为引来⼀个bug: -0和+0的原码形式不统⼀,-0的原码为1000 0000,⽽+0的原码为+0000 0000。但是在数学上-0和+0的意义应该是⼀样的,均为0。
这还不是计算机不以原码储存的⼀个原因,另外⼀个原因就在于计算机它只能做加法运算,所以计算机的减法运算还要转化成加法运算来实现。那通过什么办法实现呢。
平时⽇常⽣活所⽤到的时钟,我们可以把时钟的时间值看做是⼗⼆进制的⼀种计数器(⽐如1点钟和13点钟的时针指的是同⼀个值),所以说 5 - 3  = 2 。这个式⼦可以看作是五点钟逆时针转了3个钟到了2点钟。我们可以把式⼦变⼀下, 5 - 2 = 5 + ( 12 - 2 ) = 15 = 3 (这⾥15 = 3 是因为 15点的时钟指的是3点钟,也可以看成15超过了12,所以舍去了12变成了3)。
所以在这⾥我们引出⼀个概念,这⾥的容量12被称为模,我个⼈认为模应该是指在⼀种数学环境中数可选的容量,就像⼆进制中的模为2。⽽上⾯的推断也启⽰了我们可以将减数变成模减去减数的绝对值,然后和被减数相加得到原本减法的结果。所以我们可以在原码中,把正数的原码不变,负数的原码通过模减去这个原码得到的⼀串新的⼆进制数字串,称作补码(根据规定,我们将正数的补码等于原码)。⽐如说-3的原码为1000 0011,⽽⼋位⼆进制数的模为1 0000 0000,所以其补码为1 0000 0000 - 1000 0011 = 1111 1101,即1111 1101是-3的补码。
我们可以吧这个运算过程转化⼀下 1 0000 0000 - 1000 0011 = 1111 1111 - 1000 0011 + 0000 0001,把式⼦转化成这样⼦后,由于1111 1111 - 1000 0011的运算就跟把1000 0011的所有位数的值取反⼀样,⽽取反得到的原码则被称为反码(在规定中,正数的反码等于原码,⽽负数取反过程中其符号位不变,
所以可能会与之前讲的求补码的过程有冲突,⽽作者在之前的例⼦会出现改变符号位的可能,所以按照规定还是保持符号位不变,其他位取反),所以上式⼦中,1000 0011的反码就是为0111 1100。接下来在原先求负数补码的过程中,我们将式⼦化成1111 1111 - 1000 0011(在取反) + 0000 0001,那么在这种求负数补码的过程也可以是将负数原码取反后再加⼀,这也是⼀般求负数补码的⽅法。
⽽有了补码这种概念后,我们会发现+0的补码是0000 0000,⽽-0的原码为1000 0000,通过取反加⼀后我们会发现-0的补码竟然也是0000 0000,正好解决了会出现两个零的可能,⽽且其中-128的补码是1000 0000(可以带⼊式⼦算,其中-128的原码也为1000 0000,所以可以算出其补码正好为1000 0000)。所以补码能够使每个数⼀⼀对应,这也是计算机储存数据使⽤补码⽽不是⽤原码。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。