您是否必须将`u`后缀附加到无符号整数?

Avi*_*ohn 7 c variables unsigned literals

我知道u后缀的意思是“未签名”。但是以下代码中有必要吗?

uint32_t hash = 2166136261u;
Run Code Online (Sandbox Code Playgroud)

是问题还是惯例?还是在这种情况下有任何技术意义?该值无论如何都应转换为无符号,因为它uint32_t是无符号的。

什么时候应该,什么时候不应该将u后缀用于无符号整数值?

Bat*_*eba 5

不,没有必要。事情变得很有趣,2147483648而你的人数比这个还要多。

请注意,如果具有 32 位或更少,则形式上2166136261是 along或类型。但两者都可以以明确定义的方式转换为 a。long longintuint32_t

最后一点:如果具有 32 位或更多位,则等效的十六进制0x811C9DC5是一种类型。噢,喜悦!unsignedint

参考: https: //en.cppreference.com/w/c/language/integer_constant

  • 我就把它留在这里:http://port70.net/~nsz/c/c11/n1570.html#6.4.4.1p5 (3认同)
  • @SomeName 什么是不必要的?更新:啊,你是说后缀。是的,正如答案所述。 (2认同)