C语言奇葩试题-2之左移右移超出位宽

C语言奇葩试题-2之左移右移超出位宽,第1张

在一个夜黑风高的晚上,有一剑客自称,自幼习代码多年,阅无数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;
}

结果:

哈哈~~~~~搞定 其实这是 某大学研究生入学考试的题目

持续更新~欢迎留言奇葩问题

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/2991355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存