2011-06-24 67 views
0

Byte、UShort、UInteger、ULongなどの符号なし整数型を使用してVB.NETで2の補数を実装するにはどうすればよいですか? UIntegerをIntegerにキャストできますか?VB.NETの符号なし整数の2の補数

答えて

0

いいえ、キャストできません。その結果、大きな値のオーバーフロー例外が発生します。
ただし、これを行うことができます。

intValue = BitConverter.ToInt32(BitConverter.GetBytes(uintValue), 0) 

しかし、どのような何かにそれらをキャストすることなく、符号なしの値で数学をやってからあなたを停止しましたか?それだけで動作します。

+0

パフォーマンス。私はちょうど方法があるかどうか疑問に思った。異なる表現に変換せずにC++でキャストできます。 4294967295 - (x - 1)も動作します。 – jnm2

+0

@ jnm2 'Dim b As UInteger = Not a'のパフォーマンス上の問題はありますか?または私は何かを逃していますか? – GSerg

+1

[ウィキペディア](http://en.wikipedia.org/wiki/Two's_complement)は、私がここにある空間よりも優れていると説明することができますが、「Not」は2の補数演算子ではありません。 0 = 4294967295ではなく、-0 = 0である.1 = 4294967294ではなく-1 = 4294967295である。 – jnm2

関連する問題