c语言的操作符之按位操作符:
& 按位与
- 对某些位清0或保留某些位
| 按位或
^ 按位异或
- 用来使某些特定位的翻转
eg:10010001的第2,3位翻转
就是将10010001^00000110=10010001^6
- 实现两个数的交换(不创建临时变量)
>>右移
- eg:a>>b表示把a转为二进制后右移b位(去掉末b位),相当于a除以2的b次方(取整).
- 实际应用:如二分查找、堆的插入操作。 最大公约数的二进制算法用除以2操作来代替慢得出奇的mod运算,效率可以提高60%
<<左移
- eg:a<<b表示 把a转为二进制后左移b位(在后面添b个0) ,实际上就是a乘以2的b次方.(程序中乘以2的操作请尽量用左移一位来代替)
实用:
设一个数为n,则:
( 结合左移右移操作符)
- n&1:结果就是取二进制的最末位。(取某位值)
- n | 1:结果就是把二进制位强行变成1。(置某位为1)
- n ^1 : 结果就是将二进制末位强制取反。(某位取反)