我在嘗試將一些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預定義。* –