位运算专题
学一下c语言中的位运算,考试要考,应试用。
符号
&(按位与)
参加运算的两个数据,如果相应的二进制位都为1,则该位结果为1,否则为0.
如下:0&0=0,0&1=0,1&0=0,1&1=1
|(按位或)
参加运算的两个数据,如果相应的二进制位都为0,则该位结果为0.否则为1.
如下0|0=0, 0|1=1, 1|0=1, 1|1=1
^(按位异或)
按位异或也成为XOR运算符,如果相应的二进制位不同,则该位结果为1,否则为0.
如下0^0=0, 0^1=1, 1^0=1, 1^1=0
不用中间变量交换变量的方法如下
1 |
|
~(按位取反)
此运算符为一个单目运算符,用来对一个二进制数按位取反,例:~11的计算过程如下
<<(左移)
用来讲一个数的各位二进制全部左移若干位。
例子:11<<3计算过程如下
左移一位相当于乘以2,但只适用于该数左移时被溢出舍弃的高位中不包含1的情况,而且移动后的表达式的值,要与被移动的表达式的符号是一致的。
>>(右移)
a>>2表示将a对各二进制右移2位,移到右端的低位被舍弃,对无符号数,高位补0,原来的符号位补1,左边可能补0也可能补1,具体补什么依赖于机器。
值得注意的是,让一个数值或变量左移大于自身长度的位数 或者 使用左移右移移动的位数为负值,在不同的编译器中可能结果不一致,我们应该尽量避免这种情况。