应该是好看点吧 希望能解释下 原理 and 的原理是不是这样 比如 Integer1:=$FFFF0000; Integer2:=$0000FFFF; 得到的是0; 是不是 两个操作数的拿个位是一样的 返回值的那个位就是 那个位的值 否则 返回0 就像这样 for i:=0 to 10 do if String1[i]=String2[i] then String3[i]:=String1[i] else String3[i]:=0;
楼主的方法是对的 1 and 1=1 1 and 0=0 0 and 1=0 而多位的and操作则是逐位比较 shl 左移N位 也就是二进制的后面添加N个0,等于乘以2^n shr 右移N位 也就是二进制的去掉后面N位,等于除以2^n(整除) 当然 shl 用的时候要注意溢出问题 比如byte类型的,有8位,200=11001000 shl 1后 变成10010000=144 前面那位就被忽略掉了
20的二进制为10100
11 10111
1 and 0=0 0 and 0=0 1 and 1=120 shr 1=10 (1010)
20 shl 1=40 (101000)
nTmp : Integer;
nTest: Integer;
begin
// 右移位操作示意:
nTmp:= $00FF0000;
ShowMessage(IntToStr(BYTE(nTmp shr 16))); //向右移动16位,也就是2个字节, 00 FF 00 00,那么结果就是$FF // 左移位操作示意:
nTmp:= $FF;
ShowMessage(IntToStr(BYTE(nTmp shl 16))); // 向左移动16位置,也就是2个字节,00 FF 00 00,就是$00FF0000 // AND 运算示意:
nTmp := $00123456;
nTest:= $FFFF0000;
ShowMessage(IntToStr(nTest and nTmp)); // 结果$00120000
// 计算过程如下:
// nTest: $FF FF 00 00
// nTmp : $00 12 34 56
// ----------------------
// 结果 : $00 12 00 00
// OR 运算示意:
nTmp := $00123456;
nTest:= $FFFF0000;
ShowMessage(IntToStr(nTest OR nTmp)); // 结果$FFFF3456 // 计算过程
// nTest: $FF FF 00 00
// nTmp : $00 12 34 56
// ----------------------
// 结果 : $FF FF 34 56
end;
再请教下
$00FF0000;
和
$FF0000;
有什么区别?
希望能解释下
原理
and 的原理是不是这样
比如
Integer1:=$FFFF0000;
Integer2:=$0000FFFF;
得到的是0;
是不是 两个操作数的拿个位是一样的 返回值的那个位就是 那个位的值 否则 返回0
就像这样
for i:=0 to 10 do
if String1[i]=String2[i] then
String3[i]:=String1[i] else String3[i]:=0;
1 and 1=1
1 and 0=0
0 and 1=0
而多位的and操作则是逐位比较
shl 左移N位 也就是二进制的后面添加N个0,等于乘以2^n
shr 右移N位 也就是二进制的去掉后面N位,等于除以2^n(整除)
当然 shl 用的时候要注意溢出问题
比如byte类型的,有8位,200=11001000
shl 1后 变成10010000=144 前面那位就被忽略掉了