Gag*_*ira 2 c++ bit-shift undefined-behavior
int main()
{
int x = -2;
cout << (1<<x) << endl;
cout << (1<<-2) << endl;
}
Run Code Online (Sandbox Code Playgroud)
在这里(1<<x)打印1073741824(如何计算)
而(1<<-2)输出垃圾值。
为什么这两个返回不同的答案?
Vla*_*cow 12
根据C标准(6.5.7位移位运算符)
3对每个操作数执行整数提升。结果的类型是提升后的左操作数的类型。如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为不确定
在C ++标准(C ++ 20、7.6.7 Shift运算符)中也是如此
- ...操作数应为整数或无范围枚举类型,并执行整数提升。结果的类型是提升后的左操作数的类型。如果右操作数为负或大于或等于提升的左操作数的宽度,则该行为是不确定的。
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |