我在尝试将一些VB6逻辑转换为C#时遇到了一些问题。在VB6的功能之一,它具有以下声明:C#字节处理
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'。 – aevitas
查看[〜]运算符的[MSDN](http://msdn.microsoft.com/zh-cn/library/d2bd4x66.aspx)。特别是:*按位补数运算符为int,uint,long和ulong预定义。* –