1.移位运算符 :运算符<<和运算符>>的操作数可以是任意整型或字符型的。对两个操作数都会进行整型提升,返回的类型是左边操作数提升后的类型。
i<<j的值是将i中的位左移j位后的结果。每次从i的最左端溢出一位,在i的最右端补一个0位。
i>>j的值是将i中的位右移j位后的结果。如果i是无符号数或者非负数,则需要左端补一个0位。如果i是负数,其结果由实现定义的。
例如:
unsigned int i,j;
i = 13; // i的二进制数为: 0000000000001101
j = i << 2; // j的值为52,二进制为:0000000000110100
j = i >> 2; //j的值为3 二进制为: 0000000000000011
2.按位求反运算符 (~) 按位与运算符(&) 按位异或运算符(^) 按位或运算符(|):这四种运算符都是对操作数的每一位执行布尔运算。
~ 运算符:对操作数求反操作,即将每一个0替换成1,把每一个0替换成1;
& 运算符:两个操作数相应的位执行逻辑与运算。
^ 和 | 运算符: 都是对两个操作数执行逻辑或运算,差异是当两个操作数的位都是1时,^产生0而|产生1.
例如:
int i, j,k;
i = 21 ; //二进制数为: 0000000000010101
j = 56 ; // 二进制数为: 0000000000111000
k = ~i ; // k = 65514 二进制数为: 1111111111101010
k = i ^ j; // k = 45 二进制为: 0000000000101101
k = i & j; // k = 16 二进制为: 0000000000010000
k = i | j ; // k = 61 二进制为: 0000000000111101
优先级: 由高到低: ~ & ^ |