我在尝试将一些 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 的唯一方法吗?