关于c语言的左移运算

Posted litifeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c语言的左移运算相关的知识,希望对你有一定的参考价值。

对于任意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语言的左移运算的主要内容,如果未能解决你的问题,请参考以下文章

Java中的左移右移详细分析

python怎么集体右移

软件测试的左移方法(译)

C语言位运算符:与或异或取反左移与右移详细介绍

[c语言]左移和右移

[PHP] 算法-字符串的左循环的PHP实现