标签:
位运算表示按二进制进行的运算。
位运算首先理解二进制。二进制是指数字的每一位都是0或者1
位运算操作符<<(右移运算符) \ >>(左移运算符)
与(&) 0 & 0 = 0 1 & 0 = 0 0 & 1 = 0 1 & 1 = 1
或(|) 0 | 0 = 0 1 | 0 = 1 0 | 1 = 1 1 | 1 = 1
异或(^) 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 1 ^ 1 = 0
位移运算符
位左移
左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃
例: int a,b; a = 5; b =a<<2; //a向左移动2位 // a的二进制 00000101 向左移动2位就是 00010100 即b=20;
大家也许在这里会觉得很难计算,我说个我看到过的一个计算方法
二进制中左边多一位表示2的1次方 多2位表示2次方,依次计算
如果往左边移动几位那就乘以多少个2就行了
int a=85,b; b=a<<3; //a的二进制是 00000000 01010101 往左移动三位 00000101 01010000 这里b的值 = 85×2×2×2 = 680 大家可以用计算机算一下
2.右移运算符
这里同左移运算符相反,是将对应的数据的二进制值逐位右移若干位,并在空出的位置上填0,最高位补0
例: int a, b; a=5; b=a>>2; //a向左移动2位 00000101 00000001 //则b=1 我们也可以用上面的方法来计算只不过只是除法 //当最高位是1,则根据计算机的系统,处理方式不一
复合运算
运算符 含义 描述
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
1、“按位与”运算符(&)
是指参加运算的的俩两个数据,按照二进制进行“与”运算,如果两个相应的二进制都位1,则该位的结果为1.否则为0
按位与运算 例: 00000011(3) &00000101 (5) 00000001 (1) 由此得知3&5=1 我们可以用位与对存储单元清0 #include <stdio.h> int main() { int a=5; a &= 0x00; return 0; }
按位或”运算符(|)
两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真
异或”运算符(^)
他的规则是:若参加运算的两个二进制位值相同则为0,否则为1
应用: (1)使特定位翻转 设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算, 即: 01111010 ^00001111 01110101 运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1 即可。 (2) 交换两个值,不用临时变量 例如:a=3,即11(2);b=4,即100(2)。 想将a和b的值互换,可以用以下赋值语句实现: a=a∧b; b=b∧a; a=a∧b; a=011(2) (∧)b=100(2) a=111(2)(a∧b的结果,a已变成7) (∧)b=100(2) b=011(2)(b∧a的结果,b已变成3) (∧)a=111(2) a=100(2)(a∧b的结果,a已变成4)
4、“取反”运算符(~)
他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。
标签:
原文地址:http://my.oschina.net/u/2421636/blog/490154