Delphi循环移位操作


本文整理自网络,侵删。

 

 

 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

相关阅读 >>

Delphi 和微软的 azure 云存储

Delphi findfiles获取目录下所有文件

Delphi来实现全屏截图

Delphi 执行程序并等待完成2

Delphi 声明指令 调用左右

Delphi汉字与多字节编码的转换

Delphi 微信公众平台 Delphi sdk

Delphi access 加密方法

Delphi 映像劫持编辑器

Delphi xe6 在两个图片切换的时候实现翻书效果

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...