码迷,mamicode.com
首页 > 编程语言 > 详细

关于c语言的左移运算

时间:2019-03-26 21:06:38      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:关于   class   32bit   结果   color   运算   左移   div   编译选项   

对于任意w位的二进制,进行k位的移动时,真实的位移量为k mod w

32bit的例子

1 << 1 结果2 1 mod 32 => 1
1 << 32 结果1 32 mod 32 => 0
1 << 33 结果2 33 mod 32 => 1

但,如果是纯字面量计算,却得出0,看代码:

int a = 33;
printf("%d", 1 << a); // 2
printf("%d", 1 << 33); // 0

第一种情况,在编译过程中,由于gcc编译器不知道变量a的值,所以,位移量为33,会执行33%32=1,答案是2
第二种情况,在编译过程中,如果加上-Wall编译选项,gcc编译器会提醒你,位移量大于类型的宽度,所以,按照gcc自己处理的来,得到的答案是0,就是你的想法。

以上解释也不是很清楚,我也没有在gcc手册找到解释。先搁置吧。

关于c语言的左移运算

标签:关于   class   32bit   结果   color   运算   左移   div   编译选项   

原文地址:https://www.cnblogs.com/litifeng/p/10603422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!