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

在一个夜黑风高的晚上,有一剑客自称,自幼习代码多年,阅无数C语言题。今日有一码相求,代码如下:

#include <stdio.h>
int main()
{
   int Number=15;
   printf("out:%d",Number<<35);
   return 0;
}

输出结果为:
在这里插入图片描述
什么居然有人将一个32位的变量移动35位那结果不是0,在学习C语言的时候都知道左移多少位就在右边补多少个0,这个结果显然跟理论不一致,这也许就是人们所说的事与愿违,事情没能按照预想的方向发展。
其实这是计算机防止出现移动位数过大直接给0的一种机制,我们只需要这样算就可以了:

#include <stdio.h>
int main()
{
	   int Number=15;
	   printf("out:%d\n",Number<<35);
	   /*要移动的数据 << 移动的位数 对位宽(编译器的位数)求余
	   例如: Number<< (35%32);*/
	   printf("out:%d\n",Number<<35%32);//这个结果跟上面是一致的
	   return 0;
}

结果:
在这里插入图片描述
哈哈~~~~~搞定 其实这是 某大学研究生入学考试的题目
在这里插入图片描述
持续更新~欢迎留言奇葩问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值