【发布时间】:2014-03-24 17:00:41
【问题描述】:
我在尝试将一些 VB6 逻辑转换为 C# 时遇到了一些问题。在其中一个VB6函数中,有如下语句:
w = Not CByte(w)
其中 w 是long。
在一个示例中,在 VB6 中评估此行之后,我可以看到以下更改:
Before: w = 110
After: w = 145
但是,在 C# 中,我重写了该方法以包含以下代码:
w = ~(byte)w;
但是,当我运行相同的示例时,我得到了以下结果:
Before: w = 110
After: w = -111
我也得到了同样的结果:
w = ~(Convert.ToByte(w));
通过以下更改,我终于能够得到正确的结果:
w = ~(byte)w & 0xFF;
据我所知,C# 似乎正在将其转换为 sbyte,即使未指定这样做。我的问题是:我的逻辑有问题吗?这是获得等效 VB6 的唯一方法吗?
【问题讨论】:
-
您的问题是您对何时算术运算发生的假设是错误的。
~(byte)w与(byte)~w不同。 -
查看MSDN 以了解
~运算符。特别是:为 int、uint、long 和 ulong 预定义了按位补码运算符。