【问题标题】:Meaning of U suffixU后缀的含义
【发布时间】:2011-05-21 19:25:32
【问题描述】:

后缀(或后缀)U 对以下值意味着什么?

0U
100U

【问题讨论】:

  • 请注意,在您看到 U 的地方,通常使用小写版本的“u”,因为当它大写时,它很容易与十六进制常量混淆。 IE。 0xFFFFFFFFu 比 0xFFFFFFFFU 更明显。
  • 标题说明了一切,为什么我需要写问题正文?
  • @BillyONeal 0x11111110ll
  • @Sugar:我想我在十六进制常量中使用的 F 比 0 和 1 多得多 :)

标签: c++ c


【解决方案1】:

它代表unsigned

当你声明一个常量时,你也可以指定它的类型。另一个常见的例子是L,它代表long。 (而且你必须把它放两次才能指定一个 64 位常量)。

例如:1ULL

它有助于避免显式转换。

【讨论】:

  • 也有必要的情况。例如,整数常量被编译器解释为整数,所以像0xffffffffffffffff 这样的常量在没有ll 后缀的情况下会丢失其高32 位。
  • @zneak 实际上不会。整型文字具有可以保存值的类型(如果存在这种类型)。见The type of the literal。因此,您的示例文字的类型是 GCC 8.4.0 x86_64 上的 long unsigned int
【解决方案2】:

C 和 C++ 中的整数常量可以有多个后缀:

123u      值 123 是一个无符号整数
123l      (小写的 L)123 是有符号长
123L      同上
123uL    无符号长
123LL    一个有符号的 long long,一个 64 位或 128 位的值(取决于环境)
123uLL 无符号长长

【讨论】:

  • cppreference 对“12345...u”表示“即使没有 long long 后缀,该类型也是 unsigned long long”。很混乱,因为你的回答说 123u 是无符号整数。谁是对的,或者哪里有误会?
  • @Ela782:我查看了 cpp 参考,但找不到任何说“u”意味着 long long 的东西。我误会了吗?
  • 如果您单击上面评论中的我的链接,在该页面底部附近,作为代码示例中的评论,它会显示:<< 12345678901234567890u << '\n'; // the type is unsigned long long even without a long long suffix。你找到了吗?我当然有可能误解了那句话。
  • 哦,我明白了,我明白了!谢谢!你的意思是“因为它超出了(无符号)int 的范围”,因为u 会使其成为(无符号)int - 但因为数字太大,它会成为(无符号)@ 987654326@。对吗?
  • @Ela782:是的。我不确定我的头顶,但如果没有u,它很可能是一个签名的长长的。 (检查)不,它溢出了一个 64 位有符号整数。需要u。如果编译它的架构具有 128 位 ints,则可以选择有符号或无符号。
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2023-03-29
  • 2011-10-10
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 2015-11-29
相关资源
最近更新 更多