位运算及其应用

来源:互联网 发布:李鸿章 袁世凯 知乎 编辑:程序博客网 时间:2024/04/28 05:12

运算符及其相关描述

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

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

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

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

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

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

1.逻辑运算符

1.&的典型应用:

(1)快速对某一段数据单元数据清零。
a=321;
a=a&0x0;
a 0000 0001 0100 0001
&0000 0000 0000 0000
=0000 0000 0000 0000

(2)获取一个数据的指定位。
获得整型数a=的低八位数据的操作为a=a&0xFF。a=321。
a 0000 0001 0100 0001
&0000 0000 1111 1111
=0000 0000 0100 0001

2. |的典型应用

设定一个数据的指定位。
a=321,将其低八位数据置为1的操作为a=a| 0xFF。
a 0000 0001 0100 0001
| 0000 0000 1111 1111
=0000 0000 1111 1111

3. ^的典型应用

(1)定位翻转

定位翻转:设定一个数据的指定位,将0置为1,1置为0。
a=321,将其低八位数据翻转的操作为a=a^0xFF。
a 0000 0001 0100 0001
^ 0000 0000 1111 1111
= 0000 0001 1011 1110

(2)数值交换。无需引入第三个变量。a=3,b=4交换a,b的值。
a=a^b; 0011^0100=0111
b=b^a; 0100^0111=0011
a=a^b; 0111^0011=0100
a=a^b -> b=b^a=b^(a^b)=b^b^a=a; -> a=a^b ->

a=(a^b)^(b^b^a)=a^b^b^b^a=a^a^b^b^b;
0 0