Raj*_*dhu 2 c++ unsigned literals unsigned-integer
如果我定义该unsigned int类型的变量并使用其范围之外的值对其进行初始化,那么它会使用模并为自己分配一个在其范围内的值,对吧?
例如:
unsigned int a = 4294967298;
std::cout << a << std::endl;
Run Code Online (Sandbox Code Playgroud)
将打印2.
但是,如果不是这样,我写:
std::cout << 4294967298u << std::endl
Run Code Online (Sandbox Code Playgroud)
它打印4294967298而不打印2。
这是为什么?
我认为我们在这两个例子中做了几乎相同的事情。
是因为在第二个示例中,默认情况下文字不是int, butlong或其他东西,并且我们unsigned long通过添加u作为后缀将其转换为?那么,我们如何将它用作unsigned int文字呢?
4294967298不带任何后缀的是int、long int或long long int,具体取决于编译器可以用来保存完整值而无需包装/截断它的最小类型。将此类类型分配给unsigned int变量可能会包装该值。
4294967298u后缀u是unsigned int, unsigned long int, 或unsigned long long int(同样,取决于编译器的实现)。它不是(long) (long) int被转换成 的unsigned (long) (long) int。
有关可用后缀和使用的数据类型的详细信息,请参阅cppreference.com 上的整数文字。
operator<<对于所有有符号和无符号整数类型都是重载的,因此它能够打印传递给它的任何类型所持有的任何值。在您的第一个示例中,该值在operator<<看到之前就已经受到影响。在第二个示例中,该值按原样打印。
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |