gpt4 book ai didi

C++ 文字整数类型

转载 作者:搜寻专家 更新时间:2023-10-30 23:52:56 25 4
gpt4 key购买 nike

文字表达式也有类型吗?

long long int a = 2147483647+1 ;
long long int b = 2147483648+1 ;
std::cout << a << ',' << b ; // -2147483648,2147483649

最佳答案

是的,文字数字有类型。无后缀十进制整型字面量的类型是intlonglong long中第一个可以表示整数的类型。二进制、十六进制和八进制文字的类型选择类似,但列表中也有无符号类型。

您可以通过使用 U 后缀强制使用无符号类型。如果您在后缀中使用单个 L,则类型至少为 long,但如果不能表示为 long long,则可能为 long long一个。如果您使用 LL,则类型必须是 long long(除非实现扩展的类型比 long long 宽)。

结果是,如果 int 是 32 位类型并且 long 是 64 位,那么 2147483647 的类型是 int 2147483648 的类型是 long。这意味着 2147483647+1 会溢出(这是未定义的行为),而 2147483648+1 只是 2147483649L

这由 C++ 标准的 §2.3.12 ([lex.icon]) 第 2 段定义,以上描述是该部分表 7 的摘要。

请务必记住,赋值目标的类型不会以任何方式影响赋值右侧表达式的值。如果你想强制计算有一个long long结果,你需要强制计算的一些参数是long long;仅仅分配给一个 long long 变量是不够的:

long long a = 2147483647 + 1LL;
std::cout << a << '\n';

产生

2147483648

( live on coliru )

关于C++ 文字整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42892227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com