一部の VB6 ロジックを C# に変換しようとしているときに、少し問題が発生しています。VB6 関数の 1 つに、次のステートメントがあります。
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;
私が知る限り、そうするようにsbyte
指定されていませんが、C#はそれをに変換しているようです。私の質問は次のとおりです。私の論理に欠陥はありますか? これは、VB6 に相当するものを取得する唯一の方法ですか?