gpt4 book ai didi

c - 是否保证将 -1 分配给无符号类型会产生最大值?

转载 作者:行者123 更新时间:2023-12-05 08:48:30 28 4
gpt4 key购买 nike

我发现了一些关于这个特定主题的问题,但它们是关于 C++ 的。

How portable is casting -1 to an unsigned type?

converting -1 to unsigned types

Is it safe to assign -1 to an unsigned int to get the max value?

在阅读答案时,这似乎是 C 和 C++ 不同之处之一。

问题很简单:

如果我用 unsigned char/short/int/long var 声明一个变量或使用任何其他无符号类型,如固定宽度、最小宽度等,是否可以保证 var = - 1 会将 var 设置为它可以容纳的最大值?这个程序保证打印"is"吗?

#include <stdio.h>
#include <limits.h>

int main(void) {
unsigned long var = -1;
printf("%s\n", var == ULONG_MAX ? "Yes" : "No");
}

最佳答案

Is it guaranteed that assigning -1 to an unsigned type yields the maximum value?

是的。

Is this program guaranteed to print "Yes"?

是的。

这是一个转换,从int -1unsigned long-1 不能表示为 unsigned long。来自 C11 6.3.1.3p2 :

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

所以我们将 (ULONG_MAX + 1) 加到 -1 上,我们得到 -1 + (ULONG_MAX + 1) = ULONG_MAXunsigned long 范围内。

关于c - 是否保证将 -1 分配给无符号类型会产生最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65934534/

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