其他分享
首页 > 其他分享> > 模、原码和补码

模、原码和补码

作者:互联网

模、原码和补码

在实际生活中,如果一个物体在正北方向30度,把该物体顺时针旋转100度,和把这个物体逆时针旋转260度得到的效果是一样的。再比如说钟表,时针从2点走11个单位,和逆时针走1个单位的位置是一样的。这两个例子有个共同的特点,物体和时针都被限制在了一定的范围内,想要取到一个位置,都有两种方式。

类比这两个例子,可以理解计算机中模的概念。例子中的“一定范围”就是。两个例子里面的100与360-100的关系、11与12-11的关系就相当于计算机中的原码补码


举例:

在第一个例子中,-30度可以表示为360-30度。那么同样,在计算机中,一个8位的二进制数的模就是 1 0000 0000(2^8=256)。-3可以表示为256-3。

得到的结果11111101就被叫做-3的补码10000011(-3的原码)11111101(-3的补码)就相当于-30度与330度的关系,虽然长得不一样,但是在二进制计算中表达的意义是一样的。这样11111101就可以代替10000011(-3的源码)进行计算机中的二进制计算。


补码存在的意义

反码的存在可以让计算机表示十进制中的负数,并且可以让计算机在运算时只做加法不做减法。

例如:10-3 = 10 + (-3)

在模的范围里,一个数本身与其补码具有相同的意义。在实际计算10+(-3)时相当于10的原码 + (-3的补码)的过程。(如果此时你有个疑问,为什么不直接用-3的源码来计算10+(-3),看了下面负数的原码的定义就知道了。)


负数的原码

八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数。如果想要表示有符号整数,就要将最前面一个二进制位作为符号位,即0代表正数,1代表负数,后面7位为数值域,这就是原码定义。

  • 这也就是为什么8位的二进制能表示十进制数的范围是-128~+127

  • 而计算机在计算负数的加法不能用负数的源码计算也是因为原码定义。例如上面的10+(-3),不能用-3的源码计算,是因为-3的原码与3的原码只差了一个符号位,数值部分其实是和3,这样计算的结果显然是不对的,所以要求-3的补码,用补码来进行计算。

  • 负数在计算机计算时,都是使用其补码来进运算的。

反码

原码的符号位不变,二进制取反得到结果,只是计算机为了计算补码时的一个中间量。

各种码的计算方法

上面例子中提到的求补码的方法是,用模的值减去负数的绝对值,那个模对应的二进制1 0000 0000是9位的,而8位的二进制是无法表示这个模的。计算机计算补码的真正办法是将原码的符号位不变,二进制取反加1

标签:反码,二进制,补码,负数,0000,原码
来源: https://www.cnblogs.com/amxiang/p/16498877.html