在一个夜黑风高的晚上,有一剑客自称,自幼习代码多年,阅无数C语言题。今日有一码相求,代码如下:
#include
int main()
{
int Number=15;
printf("out:%d",Number<<35);
return 0;
}
输出结果为:
什么居然有人将一个32位的变量移动35位那结果不是0,在学习C语言的时候都知道左移多少位就在右边补多少个0,这个结果显然跟理论不一致,这也许就是人们所说的事与愿违,事情没能按照预想的方向发展。
其实这是计算机防止出现移动位数过大直接给0的一种机制,我们只需要这样算就可以了:
#include
int main()
{
int Number=15;
printf("out:%d\n",Number<<35);
/*要移动的数据 << 移动的位数 对位宽(编译器的位数)求余
例如: Number<< (35%32);*/
printf("out:%d\n",Number<<35%32);//这个结果跟上面是一致的
return 0;
}
结果:
哈哈~~~~~搞定 其实这是 某大学研究生入学考试的题目
持续更新~欢迎留言奇葩问题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)