本文整理自网络,侵删。
Delphi循环移位操作
如果在X86计算机上很简单,直接内嵌汇编ror和rol指令就是循环移位.
但是如果在Android的平台上,asm关键字是无效的.
只能自己实现.
function ror(const Value: DWORD; ShiftValue: Byte): DWORD; overload;
begin
Result := (Value shl (8 * SizeOf(Value) ?C ShiftValue)) or
(Value Shr ShiftValue);
end;
function ror(const Value: WORD; ShiftValue: Byte): DWORD; overload;
begin
Result := (Value shl (8 * SizeOf(Value) ?C ShiftValue)) or
(Value Shr ShiftValue);
end;
function ror(const Value: Byte; ShiftValue: Byte): DWORD; overload;
begin
Result := (Value shl (8 * SizeOf(Value) ?C ShiftValue)) or
(Value Shr ShiftValue);
end;
function rol(const Value: DWORD; ShiftValue: Byte): DWORD; overload;
begin
Result := (Value shr (8 * SizeOf(Value) ?C ShiftValue)) or
(Value Shl ShiftValue);
end;
function rol(const Value: WORD; ShiftValue: Byte): DWORD; overload;
begin
Result := (Value shr (8 * SizeOf(Value) ?C ShiftValue)) or
(Value Shl ShiftValue);
end;
function rol(const Value: Byte; ShiftValue: Byte): DWORD; overload;
begin
Result := (Value shr (8 * SizeOf(Value) ?C ShiftValue)) or
(Value Shl ShiftValue);
end;
举例子:
a := ror(DWORD(1), 1);
注意第一个参数因为给的是常量1,如果不指明类型会按最小的来,也就是会被当成Byte的.
如果是C++用模板不必重载写两个函数就够了.而象Delphi/C#/Java的泛型没法做到这个.
因为C++的泛型是编译时替换的,完全没有类型信息.
而后三种语言首先你要把T做移位就会编译不过.
来源:http://www.raysoftware.cn/?p=490
相关阅读 >>
Delphi2010 图片格式转换bmp, png,jpeg, gif, tiff , wmphoto
Delphi xe android 判断自己程序是否是前台程序
更多相关阅读请进入《Delphi》频道 >>