C/C++提供了六个位运算操作符,可以对整数进行位运算,下面分别来介绍这六种位运算符。
(1)按位与&
将两个操作数的每一个二进制位进行逻辑与运算。
例如:3&5
3:00000011
5:00000101
3&5:00000001
按位与操作有以下两个特别的用处:将某个操作数的若干位置0;取操作数的若干指定位。
3:00000011
5:00000101
3|5:00000111
按位或可以将操作数的某些指定位置1。
(3)按位异或^
将两个操作数的每一个二进制位进行逻辑异或运算。运算规则:对应位相同,异或结果为0;对应位不同,异或结果为1。
例如:
3:00000011
5:00000101
3^5:00000110
异或的特殊功能:某位与0异或,结果与原数值相同;某位与1异或,结果与原数值相反。
举例:要使00001111低四位反转,只需将其与0xf异或
00001010
00001111
^00000101
(4)按位取反~
对操作数的每个二进制位取反。这个就不细说啦。
(5)左移位<<;
按照运算符右侧操作数指定的位数将左侧操作数二进制值向左移动。低位补0,高位舍弃。
(6)右移位>>;
按照运算符右侧操作数指定的位数将左侧操作数二进制值向右移动。低位舍弃;无符号数高位补0,有符号数高位要么补0,要么补符号位。
掌握位运算一方面要牢记概念,另一方面需要注意各种位运算的特点。