0


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

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

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

以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。

标签: 补码

本文转载自: https://blog.csdn.net/qq_45893475/article/details/118466366
版权归原作者 ClimberCoding 所有, 如有侵权,请联系我们删除。

“整数在计算机中是如何存储的?”的评论:

还没有评论