其他分享
首页 > 其他分享> > 反码,补码与原码

反码,补码与原码

作者:互联网

首先来每期一图(这次是我的新头像)

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

———————————————————————————————————————————————————————————————————————————————————————————————————————————————————

首先我们要知道,计算机在存储数据时使用的是二进制,也就是0和1的结合,但是数字储存是个例外,数字式储存不直接用原码,而是使用数字对应的二进制数字的补码,所以这里我们来了解一下原码反码和补码。

在这之前我们先来认识一下机器数。一个数字在计算机内的储存形式是二进制数,我们称这些二进制数为机器数,机器数包含着符号,一般存放在机器数的最高位,用0表示正数,1表示负数。而因为有着符号位,所以机器数的形式值不等于其真值,我们这里假设机器数1000 0111,这个数的真正表示的值是-7,但是形式值为135,所以我们一般称带符号的机器数的真正表示的值为机器数的真值。

原码

原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值,例如的十进制的的正负1,用8位二进制的原码表示如下:

 

【+1】= 原:[ 0000 0001 ]

 

【-1】= 原:[ 1000 0001 ]

反码

反码的表示方法为:

 

正数的反码是其原码本身。

负数的反码是在其原码的基础上,符号位不变,其余各位取反。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ]

 

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ]

补码

补码的表示方法为:

 

正数的补码是其原码本身。

负数的补码是在其原码的基础上,符号位不变,其余各位取反后加1(即在反码的基础上加1)。

【+1】= 原: [ 0000 0001 ] = 反:[ 0000 0001 ] = 补:[ 0000 0001 ]

 

【-1】 = 原:[ 1000 0001 ] = 反:[ 1111 1110 ] = 补:[ 1111 1111 ]

计算机实际只存储补码, 所以原码转换为补码的过程,也可以理解为数据存储到计算机内存中的过程:

 

 

在原、反、补码中,正数的表示是一模一样的,而负数的表示是不相同的,所以对于负数的补码来说,我们是不能直接用进制转换将其转换为十进制数值的,因为这样是得不到计算机真正存储的十进制数的,所以应该将其转换为原码后,再将转换得到的原码进行进制转换为十进制数。(机器数包含符号位)

我们上面说过,原码、反码、补码的表示对于正数来说都是一样的,而对于负数来说,三种码的表示确是完全不同的,那大家是否会有个疑问:如果原码才是我们人类可以识别并用于直接计算的表示方式,那为什么还会有反码和补码?计算机直接存储原码不就完事了?

 

在解决这些问题前,我们先来了解计算机的底层概念,我们人脑可以很轻松的知道机器数的第一位是符号位,但对于计算机基础电路设计来说判别第一位是符号位是非常难和复杂的事情,为了让计算机底层设计更加简单,人们开始探索将符号位参与运算,并且采用只保留加法的方法,我们知道减去一个数,等于加上这个数的负数,即:1-1 = 1 + (-1) = 0,这样让计算机运算就更加简单了,并且也让符号位参与到运算中去。

标签:机器,0001,符号,补码,反码,原码
来源: https://www.cnblogs.com/Bronya019c/p/16685672.html