gpt4 book ai didi

c# - Delphi 7 与 C# 表达式求值

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:36 24 4
gpt4 key购买 nike

我有一个如下所示的 Delphi-7 表达式,所有变量都是 longint 类型的

cy:=((s1 and s2)or((s1 or s2)and not res))shr 31;

在 C# 中,表达式是,所有变量都是 int- 类型

cy = ((s1 & s2) | ((s1 | s2) & (~res)))>>31;

在哪里

s1  = -659459908
s2 = 283372503
res = 217426595

Delphi 7 对它求值时,我通过快速观察向右查看表达式的值,它显示值为 -1,但是当我 ShowMessage(IntToStr(cy)),它显示 1

而 C# 仍然显示 -1

我正在使用 Windows-10 64 位系统并从 VS2013 编译任何 CPU 的代码。我也尝试将 C# 变量声明为 Int32,但出现了同样的现象。

谁能说说这种现象,我们说的是什么以及如何进一步进行。

最佳答案

在 C# >>> 中,操作保留在操作有符号整数时最左边的位,例如intlong(可惜 C# 没有 Java 中的任何 >>> 操作),当 Delphi 的 shr​​ 不会:

在这两种情况下(C# 和 Delphi)我们对内部公式的计算相同

// -79459485 (decimal) == 11010000101000110111000111011100 (binary) 
((s1 & s2) | ((s1 | s2) & (~res))) == -794594852

最后一步(-794594852 >> 31-794594852 shr 31)不同:

11010000101000110111000111011100 >> 31 == 11111111111111111111111111111111 (C#)
11010000101000110111000111011100 >> 31 == 00000000000000000000000000000001 (Delphi)

修改(让C#模仿Delphi):

 unchecked { 
cy = (int)((uint)((s1 & s2) | ((s1 | s2) & (~res))) >> 31);
}

关于c# - Delphi 7 与 C# 表达式求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47096188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com