[位运算] 使用“按位异或”位运算操作直接交换两个普通变量的值 [code]位异或) 将把 $a 和 $b 中不同的位设为 1。 $a = $a ^ $b; $b = $a ^ $b; $a = $a ^ $b; } $x = 1; $y = 2; var_dump($x);var_dump($y); swap($x,$y); var_dump($x);var_dump($y); ?>[/code]
1. 按位与运算 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为000...
看一些C源码例子中都会出现像下面这样的宏定义 #define IS_ARRAY (1<<0) #define IS_OBJECT (1<<1) #define IS_METHOD (1<<2) 上面的表达式的运算结果应该是:1, 2, 4,也就是跟下面的应该是等同的 #define IS_ARRAY 1 #define IS_OBJECT 2 #define IS_METHOD 4 不知道这两种用法有什么区别,哪一种更好或是适合哪种情况,还有的使用下面的方法 #define STATIC 0x01 #define ABSTRACT 0x02 #define FINA...
对于一个32位数,我想取出以下12个bit (画x和y的) xxxxxxxx0000000000000000yyyy0000 并组成一个新的数yyyyxxxxxxxx 或 xxxxxxxxyyyy都可以. 怎么用位运算实现呢?
比如下面这个小程序:
[code]
#include
看LDD中有些例子涉及到位运算,不太懂,请指点 okdval = readb (base + add); writeb (oldval^0xff,base + add); mb(); newval = readb(base + add); if ((oldval^newval) == 0xff) { ......} if (oldval^newval)!=0){......} if (oldval == 0x55)&& (readb(base + add + 1)==0xaa)){ ... add +=(size&~2048)-2048; ...} 这些位运算有什么作用,还有看到有些if语句中的条件就是位运算的, 是起什么作用?