C语言按位左移运算规则

Python017

C语言按位左移运算规则,第1张

C语言中按位左移的运算符为<<,其规则如下:

对于操作a<<n,

1 按照二进制值每位向高位(书写上是向左)移动n位;

2 最高位(最左边的)n位舍去;

3 最低位(最右边)填加n个0.

简单起见,用char型举例如下:

例一

0x12 <<3 =>

B00010010 <<3 =>

B10010 000(这里最高位的三个0被舍去,其它依次左移,最低位补三个0) =>

0x90

即0x12 <<3 = 0x90

例二

0x9E <<2 =>

B10011110 <<2 =>

B01111000 (最高位10舍去,最低位补两个0)=>

0x78

可以编写如下程序验证:

#include <stdio.h>

void check(char a, int n)

{

    printf("0x%hhx << %d = 0x%hhx\n", a, n, a<<n)

}

int main()

{

    check(0x12, 3)

    check(0x9e, 2)

    

    return 0

}

其运行结果为

0x12 << 3 = 0x90

0x9e << 2 = 0x78

可以看到与我们计算结果是相符的。

C语言中,“<<”为左移运算符,“>>”为右移运算符。

具体使用方法如下:

1、左移运算符(<<)

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

例:a = a <<2 将a的二进制位左移2位,右补0,

左移1位后a = a * 2

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

2、右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

操作数每右移一位,相当于该数除以2。

例如:a = a >>2 将a的二进制位右移2位。

左补0 or 补1 得看被移数是正还是负。