Menu Close

C语言运算符:按位运算符

1. 什么是位运算符?

运算符在位级别执行数据操作。这些运算符还执行从右到左的位移位,或从左到右的位移位。按位运算符不适用于 float 或 double、long double、void 等。

下列表格列出六个位运算符

运算符 描述 规则
& 按位与 若两个相应额二进制位都为1,则该位的结果为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,则该位的结果为1,否则为0
^ 按位异或 (XOR) 若两个二进制位相同,则结果为0,不同则为1
~ 按位反 (NOT) 按位取反,即0变1,1变0
>> 右移 将一个数的二进制位全部右移若干位。不同系统下右移的结果不同。
<< 左移 将一个数的二进制位全部左移若干位,左移1位相当于乘2,左移n位,相当于乘2的n次方

说明:

(1).位运算符中除“~”以外,均为双目运算符,即要求两侧各有一个运算量

(2).运算量只能是整型或字符型数据,不能为实型数据

(3).位运算符的操作对象是数据所代表的补码

2. 位运算符真值表

&、 | 和 ^ 的真值表如下所示:

a b a & b a | b a ^ b
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

3. 位运算符>> 右移和左移运算符

下表说明了按位运算符左移和右移的移法:

在 a << b 的情况下, 00010000 向左移动 2 位,并在最右边添加额外的零,因此该值变为 01000000 ;

对于 a >> b,从右边移了 2 位,因此从右边去除了两个零,在左边添加了两个零,因此该值变为 00000100

请注意,移位不像旋转那样工作,这意味着移位的位不会添加到另一端。移位的位的值丢失了。

4. 按位取反运算符

1的补码运算符,也称为按位取反运算符,将操作数中的所有 1 变为 0,并将所有 0 变为 1。

例如,如果原始字节为 00101100,则补码后将变为 11010011。

例1. 我们通过下例理解按位取反运算符

结果

例2. 按位运算符举例

结果

注意:左移和右移运算符不能用于负数运算

从技术面的角度来看,按位异或运算符是最有用的运算符。它被用于许多问题。

一个简单的例子是“给定一组数字,其中除一个数字外,所有元素都出现偶数次,找出出现奇数的数字”.

这个问题可以通过对所有数字进行异或来有效解决。

例3:按位异或运算符举例

结果:

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in C语言教程