为什么在32次以上使用时,32位整数的左位移位(<“)不像预期的那样工作呢?当我编写以下程序并使用GNU C+编译器时,输出是1我认为这是由编译器执行的旋转操作造成的。#include <iostream>int main(){
int a = 1;
std::cout << (a << 32) << std::endl;
return 0;}但从逻辑上说,如果比特宽度溢出,则输出应该为0。怎么回事?密码在第一位,http://ideone.com/VPTwj.
3 回答
江户川乱折腾
TA贡献1851条经验 获得超5个赞
int
评论中对问题的回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
E1<E2的值为E1左移E2位置;空出位为零填充位。如果E1具有无符号类型,则结果的值为E1×2^E2,减少的模比结果类型中可表示的最大值高。否则,如果E1具有符号类型和非负值,且E1×2^E2在结果类型中可表示,则为结果值; 否则,行为是未定义的。.
- 3 回答
- 0 关注
- 706 浏览
添加回答
举报
0/150
提交
取消