delphi 函数:function RB(A: longint): longint;
begin
Result := (A shr 24) or ((A shr 8) and $FF00) or ((A shl 8) and $FF0000) or (A shl 24);
end;
我转成C#: private int RB(int A) {
return (A >> 24) | ((A >> 8) & 0xFF00) | ((A << 8) & 0xFF0000) | (A << 24);
}结果很奇怪:
我的A值为:-2143996893delphi 的结果是: 590624128
c#:-128请各位帮尽快分析一下我是否转错了,谢谢~!
begin
Result := (A shr 24) or ((A shr 8) and $FF00) or ((A shl 8) and $FF0000) or (A shl 24);
end;
我转成C#: private int RB(int A) {
return (A >> 24) | ((A >> 8) & 0xFF00) | ((A << 8) & 0xFF0000) | (A << 24);
}结果很奇怪:
我的A值为:-2143996893delphi 的结果是: 590624128
c#:-128请各位帮尽快分析一下我是否转错了,谢谢~!
但 delphi 的结果是没有溢出的啊?
longint 就是 integer,对应 C# int 这个应该没有错。
而 pascal 语言不支持带符号右移的语法,也就是说,delphi 的右移只相当于 c 类语言中无符号整数的右移