c - 用 "U"指定无符号整数有什么意义?

标签 c unsigned convention

从我记事起,我就一直这样做:

for (unsigned int i = 0U; i < 10U; ++i)
{
    // ...
}

换句话说,我对无符号整数使用了 U 说明符。现在看了这个太久了,我想知道我为什么要这样做。除了表示意图之外,我想不出它在像这样的琐碎代码中有用的原因?

我应该继续使用这个约定是否有一个有效的编程原因,或者它是否多余?

最佳答案

首先,我将说明您可能显而易见的内容,但您的问题留有余地,因此我确保我们都在同一页上。

无符号整数和常规整数之间有明显的区别:它们的范围不同(int32 为 -2,147,483,648 到 2,147,483,647,uint32 为 0 到 4,294,967,295)。当您使用正确的位移位 >>> 运算符时,将哪些位放在最高位是不同的。

当您需要告诉编译器将常量值视为 uint 而不是常规 int 时,后缀很重要。如果常量在常规 int 的范围之外但在 uint 的范围内,这可能很重要。如果您不使用 U 后缀,编译器可能在这种情况下抛出警告或错误。

除此之外,Daniel Daranas 在评论中提到唯一发生的事情:如果您不使用 U 后缀,您将隐式地将常量从常规 int 转换为 uint .这对编译器来说是一点点额外的努力,但没有运行时差异。

你应该关心吗?这是我的回答(粗体,对于那些只想快速回答的人):确实没有充分的理由将常量声明为 10U0U 大多数时候,您处于 uint 和 int 的公共(public)范围内,因此无论是 uint 还是 int,该常量的值看起来都完全相同。编译器将立即采用您的 const int 表达式并将其转换为 const uint。

也就是说,这是我可以为另一方提供的唯一论据:语义。使代码在语义上连贯是很好的。在这种情况下,如果您的变量是一个 uint,将该值设置为常量 int 就没有意义。如果你有一个 uint 变量,那显然是有原因的,它应该只适用于 uint 值。

不过,这是一个非常无力的论据,特别是因为作为读者,我们接受 uint 常量通常看起来像 int 常量。我喜欢一致性,但使用“U”没有任何好处。

关于c - 用 "U"指定无符号整数有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740911/

相关文章:

C语言编程问题

c++ - 使用 scanf 过滤掉负数

c - 为什么用 short* 而不是 char* 作为字符串? char* 和 unsigned char* 的区别?

c - 在 C 中移位位值

java - 变量的命名约定

c++ - 以独立于路径/安装/构建的方式了解资源路径的好方法

java - Java 中的类名应该有多独特?

c - AVR 工作室 Nibobee 图书馆

c - 什么是标准输入缓冲区?

strcpy 之后 char[] 具有重复值