Delphi与C++位运算符的对应, 学习了下.
(地址是:)
位运算符对应关系如下:
C++ | Delphi | |
与 | & | and |
或 | | | or |
取反 | ~ | not |
异或 | ^ | xor |
左移 | << | shl |
右移 | >> | shr |
接下来是弄明白该符号的具体意思:
x shl n | x的二进制数向左移n位,尾部补n个零 |
x shr n | x的二进制数向右移n位,首部补n个零 |
x or n | 二进制(x 、n)相加,同1为1,有1则1 :1+1=1,0+1=1,0+0=0 |
x xor n | 二进制(x 、n)相加, 同1为0,有1则1 :1+1=0,0+1=1,0+0=0 |
x and n | 二进制(x 、n)相加,同1为1,有0则0 :1+1=1,0+1=0,0+0=0 |
not x | 二进制取反(需先指定数据的大小),1为0,0为1 |
例子1: 255 shl 2
1. 255转化为二进制为: 1111 1111
2. 该二进制数左移2位, 尾部补0,二进制变成: 11 1111 1100,转化十进制为1020
例子2: 255 shr 2
1. 255转化为二进制为: 1111 1111
2. 该二进制数右移2位, 首部补0,二进制变成: 0011 1111,转化十进制为63
例子3: 255 or 36
1. 255转化为二进制为: 1111 1111
36转化为二进制为 : 0010 0100 根据规则同1为1 有1则1 的规则进行转换
转化后的二进制为 : 1111 1111 转化十进制为255
例子4: 255 xor 36
1. 255转化为二进制为: 1111 1111
36转化为二进制为 : 0010 0100 根据规则同1为0 有1则1 的规则进行转换
转化后的二进制为 : 1101 1011 转化十进制为219
例子5: 255 xor 88
1. 255转化为二进制为: 1111 1111
88转化为二进制为 : 0101 1000 根据规则同1为1 有0则0 的规则进行转换
转化后的二进制为 : 0101 1000 转化十进制为88
例子6: not 99
var
iRet: Integer;
iCal: Byte;
begin
//需要指定数据的类型
iCal:= 99;
iRet:= not iCal;
Memo1.Lines.Add(Format('运算结果: %u', [iRet]));
end;
x:=x shl 1 二进制数向左移1位,尾部补1个零,相当于x:=x*2; x:=x shl 2 二进制数向左移2位,尾部补2个零,相当于x:=x*4; ... x:=x shl n 二进制数向左移n位,尾部补n个零,相当于x:=x*2^n; x:=x shr 1 二进制数向右移1位,首部补1个零,相当于x:=x div 2; x:=x shr 2 二进制数向右移2位,首部补2个零,相当于x:=x div 4; ... x:=x shr n 二进制数向右移n位,首部补n个零,相当于x:=x div (2^n);