main () {int i=5; printf("%d\n",i>>2<<2)};

 我来答
伟霁0EL
2019-12-29 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:751万
展开全部
<<和>>,位移运算。
理解这种算法需要转换从二进制上来理解。
int
i
=
5;
//将5转换成二进制为0000
0101(这里用8位的来表示,实际CPU会使用int实际位数来运算)
i>>2;
//右移二位,移后由0来补充空白,即0000
0101>>2
=
0000
0001
i>>2<<2;
//再左移二位,移后仍由0来补充,即0000
0001<<2
=
0000
0100
"%d\n",
i>>2<<2
//所得值用十进制来表示,即为4
其实可简单地将位移N位理解为乘(除)2的N次方。但是要考虑溢出的问题,如
printf("%d\n",
0X80000000
<<
1); //超过32位,实际打印结果为0,
不同系统可能会不同结果。
换一种思路,i>>N<
>2<<2, 其实是将最后两位清0,即变成
0000
0100。
可以用宏来表示 #define
CLR_BIT(_n,
_bit)
((_n)
>>
(_bit)
<<
(_bit))
这种思路要比用
位与
&
来清0要用趣得多。
情满绝世界花1
2020-01-28 · TA获得超过3万个赞
知道小有建树答主
回答量:1.1万
采纳率:27%
帮助的人:630万
展开全部
void
fun(int
i)
{i=i*5}
//计算i

10,这里的i为子函数中局部变量,不会被传回主函数
void
main(
)
{int
i=2;
fun(i);
//调用fun函数,将2作为参数传递过去
printf(“%d\n",i);//输出结果i的值为2
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式