将数X的第N位取反,N从0开始:
function ToggleBit(const X, N: integer): integer;
begin
result := X xor (1 shl (N and 31));
end;更有效的方法,但是平台依赖:
function ToggleBit(const X, N: integer): integer;
asm
btc eax,edx
end;
function ToggleBit(const X, N: integer): integer;
begin
result := X xor (1 shl (N and 31));
end;更有效的方法,但是平台依赖:
function ToggleBit(const X, N: integer): integer;
asm
btc eax,edx
end;
置1和只有某位是1的数据|=就可以了。
置0和只有某位是0的数据&=就可以了。
只有某位是0的数据可以通过只有某位是1的数据按位取反可得。
只有某位是1的数据可通过把1左移n位得到。
x86上也有相应的bit设置1、0的指令:
function SetBit(const X, N: integer): integer;
asm
bts eax,edx
end;function ResetBit(const X, N: integer): integer;
asm
btr eax,edx
end;平台无关的实现你也可以自己写出来。
x86上也有相应的bit设置1、0的指令:
function SetBit(const X, N: integer): integer;
asm
bts eax,edx
end;function ResetBit(const X, N: integer): integer;
asm
btr eax,edx
end;平台无关的实现你也可以自己写出来。
谢了