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 = 0x900x9e << 2 = 0x78
可以看到与我们计算结果是相符的。
跟运算符的优先级有关。左运算符,就是用符号以左边的数值进行运算
。右运算符就是对符号右边的数值进行处理。
右运算,例如:
int
a
a
+=2
C语言中右结合的运算符有:
(1)!逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;&地址运算符;sizeof长度运算符
(2)?
:条件运算符
(3)=、
+=、
-=、
*=、
/=、
%=、
&=、
^=、
|=、
<<=、
>>=赋值运算符