gpt4 book ai didi

c - 在 C 中使用 unsigned int 有什么意义?

转载 作者:太空狗 更新时间:2023-10-29 17:00:52 27 4
gpt4 key购买 nike

我认为 unsigned int 只能存储 >= 0 的整数。但是我尝试将负数分配给一个无符号整数,没有发生什么特别的事情。它似乎毫无问题地存储了值。

那么 signed 和 unsigned int 之间有什么区别,如果它无论如何都可以存储任何值,那又有什么意义呢?

最佳答案

像这样的语句

unsigned int t = -1;
printf("%u", t);

在 C 中完全合法且定义明确。负值在分配给无符号整数类型时会隐式转换(参见例如 this 在线 C 标准草案):

6.3.1.3 Signed and unsigned integers

(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.

上述程序的输出是一个无符号值,即

4294967295

因此您可以将“负”值分配给无符号整数类型,但结果并不是实际意义上的负值。当您将无符号整数值与负值进行比较时,这一点尤其重要。例如,考虑以下两个循环:

int i = 10;
while (--i >= 0) { // 10 iterations
printf("i: %d\n", i);
}

unsigned int u = 10;
while (--u >= 0) { // endless loop; warning provided.
printf("u: %u\n", u);
}

第一个将在 10 次迭代后完成,而第二个将永远不会结束:无符号整数值不能变为负数,因此 u >= 0 始终为真。

关于c - 在 C 中使用 unsigned int 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899902/

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