位运算符对应关系
Delphi | C++, C#, Lua | 运算规则 | |
---|---|---|---|
与 | and | & | 两个位都为1时,结果才为1 |
或 | or | | | 两个位都为0时,结果才为0 |
取反 | not | ~ | 两个位相同为0,相异为1 |
异或 | xor | ^ | 0变1,1变0 |
左移 | shl | << | 各二进位全部左移若干位,高位丢弃,低位补0 |
右移 | shr | >> | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
运算的用途
清零
如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
取一个数的指定位
比如取数 X=1010 1110 的低4位,只需要另找一个数Y,令Y的低4位为1,其余位为0,即Y=0000 1111,然后将X与Y进行按位与运算(X&Y=0000 1110)即可得到X的指定位。
判断奇偶
只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。