gpt4 book ai didi

c - 为什么 unsigned int x = -1 和 int y = ~0 具有相同的二进制表示形式?

转载 作者:太空狗 更新时间:2023-10-29 16:39:40 29 4
gpt4 key购买 nike

在下面的代码段中将是:

  • 函数的结果
  • x 的值
  • y 的值
    {         unsigned int x=-1;         int y;         y = ~0;         if(x == y)             printf("same");         else             printf("not same");     }
a. same, MAXINT, -1b. not same, MAXINT, -MAXINTc. same , MAXUINT, -1d. same, MAXUINT, MAXUINTe. not same, MAXINT, MAXUINT

有人可以向我解释它是如何工作的还是可以只解释一下代码片段??

我知道这是关于二进制补码 n 等。MAXINT 和 -1 的意义是什么?这是因为 unsigned int 和 int 的东西——我说的对吗?

最佳答案

unsigned int x=-1;

1 是一个整型文字,类型为 int(因为它适合 int)。应用于 int 的一元 - 不会导致进一步提升,因此 -1 是一个 int,其值为 - 1

当转换为 unsigned int 时,使用模 2^N 算法,其中 N 是 unsigned int 中的值位数。 x 的值为 2^N - 1,即 UINT_MAX(什么是 MAX_UNIT?)。

int y;
y = ~0;

同样,0int 类型,在 C 中所有允许的 int 表示必须具有 int 的所有值位 将 0 表示为 0。同样,一元 ~ 不会发生提升,因此 ~0 是一个所有值位都为 1 的 int。它的值是什么取决于实现,但它是负数(符号位将被设置)所以绝对不是 UINT_MAXINT_MAX。此值未更改地存储在 y 中。

if(x == y)
printf("same");
else
printf("not same");

在此比较中,y 将被转换为 unsigned int,以便与已经是 unsigned int 的 x 进行比较。由于 y 有一个实现值,转换为 unsigned int 后的值仍然是实现定义的(尽管转换本身是模 2^N 并且完全指定)。比较的结果仍然是实现定义的。

总而言之:

implementation defined, UINT_MAX, implementation defined

在补码练习中:

not same, UINT_MAX, -0 (aka 0)

符号加大小:

not same, UINT_MAX, INT_MIN

补码:

same, UINT_MAX, -1

关于c - 为什么 unsigned int x = -1 和 int y = ~0 具有相同的二进制表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141163/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com