【发布时间】:2013-10-25 14:43:20
【问题描述】:
int main(){
ll a=pow(2,32);
cout <<a<<endl;
cout << (-1<<1)<<endl;
printf("%x",-1<<1);
}
对于上面的代码,我得到以下输出:
4294967296
-2
fffffffe
十进制的4294967296 等于十六进制的fffffffe,基本上是2^32。为什么 printf 和 cout 的行为不同?这种转变究竟是如何运作的?
【问题讨论】:
-
改用
printf("%d", ...)。 -
4294967296 肯定不等于 fffffffe。前者是
2^32,后者是2^32-2。 -
对于左移负数是否未定义存在不同的解释。 John 创建了一个question 看看我们是否可以解决它。