移位运算符
符号 含义
<< 左移位
>> 右移位
举例(32位ubuntu系统,unsigned short int 16bit)
#include <stdio.h>
#include <stdlib.h>
void intTobinary(unsigned int);
int main()
{
unsigned short int a = 15;
int i;
//首先a左移2位
intTobinary(a);
intTobinary(a << 2);
}
/**
* Description:将整数的二进制显示出来
*/
void intTobinary(unsigned int a)
{
int binary[16] = {0};
int temp, i;
for(i = 0; a; i ++)
{
binary[i] = a % 2;
a /= 2;
}
for(i = 15; i >= 0; i --)
{
printf("%d", binary[i]);
}
printf("\n");
}
结果:
补充:
无符号整数在移位的过程中一般都是补0
注意:
移位运算符的优先级比算数运算符的优先级低!
按位求反、按位与、按位异或、按位或
符号 含义
~ 按位求反
& 按位与
^ 按位异或
| 按位或
循环移位
8bit的 a = 01111011, 循环左移2位,正确的结果是: 11101101
过程:
- 变量 b = a >> (8 -2),用b来得到正常左移丢失的位和循环位移之后其正确的位置 b = 00000011
- a 正常左移2位,a << 2, a = 10110100
- 循环左移的结果a = a | b; a = 10110111
公式
- 在数据类型长度N
- a循环左移n位,a = (a >> (N - n) | a << n)
- a循环右移n位,a = (a << (N - n) | a >> n)