整型在内存中的存储方式

整型在内存中的存储方式

整型数据的二进制表现形式———原码、反码、补码

当整型是有符号整型时,这三种表现方法均有符号位和数值位两部分。

符号位 0 表示正

符号位1 表示负

正整数的原、反、补码相同

整型数据的存放方式

对于整型来说:数据存放内存中存放的是补码。

原因:

1.使用补码,可以统一处理符号位和数值域

2.加法和减法可以统一处理(cpu只有加法器),此外,原码和补码相互转换,其运算过程相同,不需要额外的硬件电路

整型数据的存放方式

对于整型来说:数据存放内存中存放的是补码。

对于使用补码存储的原因:

原因:

1.使用补码,可以统一处理符号位和数值域

2.加法和减法可以统一处理(cpu只有加法器),此外,原码和补码相互转换,其运算过程相同,不需要额外的硬件电路

int main()
{
    int num = 10;  //创建了一个整型变量,这时向内存申请大小为4个字节的空间进行存储
    return 0;
}

10是正整数,所以其原,反,补码相同

00000000000000000000000000001010 -- 原码

00000000000000000000000000001010 -- 反码

00000000000000000000000000001010 -- 补码

再举-1的例子

10000000 00000000 00000000 00000001 -- 原码

11111111 11111111 11111111 11111110 -- 反码 //符号位不变,其余全部取反,符号位是第一位

11111111 11111111 11111111 11111111 -- 补码 //反码的二进制位加一就是补码

接着解释原因一:

当用原码进行计算的时候,计算结果是错误的

计算 1 - 1

相当于 1 + (-1)

00000000 00000000 00000000 00000001 -- 1的原码

10000000 00000000 00000000 00000000 -- -1 的原码

原码相加

10000000 00000000 00000000 00000010 ---- 其大小为 -2

与实际结果不符

用补码进行计算 1 + (-1)

00000000 00000000 00000000 00000001 -- 1的补码

11111111 11111111 11111111 11111111 -- -1 的补码

将两数的补码相加

00000000 00000000 00000000 00000000 --- 结果为0 符合实际结果

从上述情况可见,用补码计算统一了符号位和数值位 ,非常方便。

解释原因二:

原码到补码 和 补码到原码 都可以用取反 +1得到

如图

整型在内存中的存储方式_第1张图片

我们用 -1 来举例子

首先是最常见的情况

从原码变到补码

原码先取反再+1得到补码

10000000 00000000 00000000 00000001 --- 原码

11111111 11111111 11111111 11111110 ---- 反码 (原码取反)

11111111 11111111 11111111 11111111 ---- 补码 (反码+1)

然后是从补码变到原码

11111111 11111111 11111111 11111111 --- 补码

10000000 00000000 00000000 00000000 ---- 补码取反

10000000 00000000 00000000 00000001 --- 补码取反后+1 得到的就是 -1 的原码

所以从原码变到补码 和 从 补码变到原码 可以用相同的步骤完成,即运算过程相同

上图中 从补码-1再取反的运算过程其实就是原本的原码变到补码的逆运算。所以这里我们不再展开描述

你可能感兴趣的:(c语言)