整数在计算机中是如何存储的?

整数在计算机中是如何存储的?

  • 无符号整数按其二进制的形式直接存储
  • 有符号整数按其补码的形式存储

以8位二进制数为例:

  • 无符号整数存储范围:0~2^8 - 1 [0, 255]
  • 有符号整数存储范围:-2^7 ~ 2^7 - 1 [-128, 127]

练习:考虑以下C代码

int x = -1;
unsigned u = 2147483648;
printf("x = %u = %d \n", x, x);
printf("u = %u = %d \n", u, u);

在32位机器上运行上述代码时,它们的输出结果是什么?Why?

先看输出结果:

x = 4294967295 = -1
u = 2147483648 = -2147483648

解析:

%d 表示数据按十进制有符号整型数输入或输出;
%u 表示数据按十进制无符号整型数输入或输出。

int x = -1 是有符号的整数,在计算机中用补码的形式存储,即“1111 … … 1111”(共32位)。当作为32位无符号整数解析时,“1111 … … 1111”的值为 2^31 + 2^30 + … + 2^0 = 2^32 - 1 = 4294967296 - 1 = 4294967295。

unsigned u = 2147483648 是无符号的整数,在计算机中直接存储,即“1000 … … 0000”.当作为有符号整型数解析时,它是某个数的补码;而我们又知道32位带符号整数的最小负数 -2^31 = -2147483648 的补码为 “1000 … … 0000”,所以unsigned u = 2147483648 作为有符号整型数时,代表的值为 -2147483648。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ClimberCoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值