编译完下面的代码后,我得到了一个奇怪的结果,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告诉你“左移count> = type的宽度”。使用clang的'-fsanitize = ...'选项也是一个好主意。 – 2013-05-13 07:23:28
你发布的代码显然是C++,但你也用C标签?这两种语言往往偏离这样的边界情况,所以最好提问你真正感兴趣的语言。一般来说,对签名类型进行移位操作不是一个好主意。 – 2013-05-13 08:17:17