【发布时间】:2013-05-13 05:44:46
【问题描述】:
编译下面的代码后,我得到了一个奇怪的结果,a =1 而 b =0。谁能解释一下幕后发生了什么?
#include<iostream>
using namespace std;
int main(){
int n=32;
int a=1<<n; //turns out a=1
int b=1<<32; //turns out b=0
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
【问题讨论】:
-
在开发代码时请始终启用并阅读警告。例如,Gcc 会告诉您“左移计数 >= 类型宽度”。使用 clang 的
-fsanitize=...选项也是一个好主意。 -
你发布的代码明明是C++,但你也用C标记?这两种语言在这样的边界情况下往往会出现偏差,因此最好针对您真正感兴趣的语言提出问题。通常,对有符号类型进行移位操作并不是一个好主意。