我们什么时候需要提及/指定数字文字的整数类型?

iam*_*ind 3 c c++ types integer

我遇到了如下代码:

#define SOME_VALUE 0xFEDCBA9876543210ULL
Run Code Online (Sandbox Code Playgroud)

SOME_VALUE被分配到一些unsigned long long以后.

问题:

  1. ULL在这种情况下是否需要有postfix ?
  2. 我们需要指定所用整数的类型是什么情况?
  3. 在这种情况下,C和C++的行为是否有所不同?

Dan*_*her 7

在C中,一个十六进制文字得到第一类型的int,unsigned int,long,unsigned long,long longunsigned long long可表示其值,如果它没有后缀.如果C++有相同的规则,我不会感到惊讶.

如果你想给一个文字比默认情况下更大的类型或者如果你想强制它的签名,你需要一个后缀,例如考虑

1 << 43;
Run Code Online (Sandbox Code Playgroud)

没有后缀,这是(几乎可以肯定)未定义的行为,但是1LL << 43;例如会很好.

  • 6.5.7节(n1570):"如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义." 除非你的`int`至少有43位,否则它是未定义的行为.它可能会产生0或512,但它是未定义的. (2认同)