gpt4 book ai didi

c - C语言中涉及无符号类型的对象的类型转换

转载 作者:行者123 更新时间:2023-11-30 19:29:56 25 4
gpt4 key购买 nike

我最近一直在阅读 KnR,并发现了这样一句话:

"Type conversions of Expressions involving unsigned type values are complicated"

为了理解这一点,我编写了一个非常小的代码:

#include<stdio.h>
int main()
{
signed char x = -1;
printf("Signed : %d\n",x);
printf("Unsigned : %d\n",(unsigned)x);
}
  • 带符号的 x 位形式为:1000 0001 = -1
  • 转换为无符号时,其值必须为 1000 0001 = 129。但即使在类型转换之后它也会打印 -1。

Note: I'm using gcc compiler.

最佳答案

C11 6.3.1.3,第 2 段:

Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type.

−1 无法表示为 unsigned int 值,−1 会转换为 UINT_MAX。因此-1变成一个非常大的正整数。

此外,使用 %u 表示 unsigned int,否则结果会调用未定义的行为。

关于c - C语言中涉及无符号类型的对象的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109228/

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