C语言的按位与、或、非、异或都什么意思。有什么用

Python017

C语言的按位与、或、非、异或都什么意思。有什么用,第1张

运算符有:&(按位与)、|(按位或)、^(按位异或)、~

(按位取反)。

优先级从高到低,依次为~、&、^、|

按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x

&

0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x

=

x

&

077。

按位或运算的典型用法是将一个位串信息的某几位置为1。如将要获得最右4位为1,其他位与变量j原来其他位保持相同,可用逻辑或运算017|j;

按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。

交换两个值,不用临时变量,假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:

a=a^b

b=b^a

a=a^b

取反运算常用来生成与系统实现无关的常数。如要将变量x最低6位置成0,其余位不变,可用代码x

=

x

&

~077实现。

先说一下布尔值的与、或、异或、反运算:

与运算,两者都为真计算结果为真,反之为假:

1

&

1

=

1,1

&

0

=

0,0

&

1

=

0,0

&

0

=

0;

或运算,至少其一都为真计算结果为真,反之为假:

1

|

1

=

1,1

|

0

=

1,0

|

1

=

1,0

|

0

=

0;

异或运算,两者不同为真,反之为假:

1

^

1

=

0,1

^

0

=

1,0

^

1

=

1,0

^

0

=

0;

取反运算,单目运算符:

~1

=

0,~0

=

1;

以上例子

1

代表真,0

代表假。

按位运算就是将二进制位的每一位进行如上计算。

2

|

5,转换为二进制(以

1

字节

8

位为例):

00000010

|

00000101,每个二进制位分别进行或运算后得:

00000111

7。虽然

7

=

5

+

2

但不代表

2

|

5

=

2

+

5。

如:2

|

6

=

6,5

|

6

=

7,2

|

4

|

5

|

6

|

7

=

7。

同理,按位与运算

2

&

5

的结果为

0:

00000010

&

00000101

=

00000000

按位与运算

2

&

6

的结果为

2(二进制

00000010):

00000010

&

00000110

=

00000010。

同样也能算出

2

^

6

的结果为

4(二进制

00000101):

00000010

^

00000110

=

00000100。

取反运算

~00000110

=

11111001。

当然,对一个数字进行取反运算结果是多少,还与该类型是有符号还是无符号,占用的字节大小等有关。上面的例子只是以一个字节为例进行说明。

异或运算符∧也称XOR运算符,它的作用是判断参加运算的两个二进制位是否为同号,若同号则结果为0;异号则为1。即0异或0=0,1异或0=1,1异或1=0。

应用:

1、使特定位翻转。假设有01111010,想使其低4位翻转。可以将它与0000111进行异或运算,结果为01110101。

2、与0异或,保留原值。如012异或00=012.

3、交换两个值,不用临时变量。假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:

a=a异或b

b=b异或a

a=a异或b

C语言位运算符:与、或、异或、取反、左移和右移

位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。

&按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0

| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1

^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1

~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0

<<左移 用来将一个数的各二进制位全部左移N位,右补0

>>右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0