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

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

将 -1 转换为无符号类型的便携性如何?

将 -1 转换为无符号类型

将 -1 分配给 unsigned int 以获得最大值是否安全?

在阅读答案时,这似乎是 C 和 C++ 不同之处之一,这似乎是可能的,或者至少不是不可能的。

问题很简单:

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

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

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

回答

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

是的。

该程序是否保证打印“是”?

是的。

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

否则,如果新类型是无符号的,则通过重复加或减一个新类型可以表示的最大值来转换该值,直到该值在新类型的范围内

所以我们加一个(ULONG_MAX + 1)-1,我们得到-1 + (ULONG_MAX + 1) = ULONG_MAX在 的范围内unsigned long


以上是是否保证将-1分配给无符号类型会产生最大值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>