0

元の質問が変更されました。

Short値(&H8000)の左端のビットをビット単位でオフにし、他のビットはそのままにしておきます。

Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000)
Dim z = BitConverter.ToInt16(x, 0)

ビット演算子を使用したより短い方法はありませんか?

私がする時

Dim a = Short.MaxValue Or &H8000

コンパイラエラーが発生します。否定するのではなく、アップします。

4

2 に答える 2

3

これは、.NETが符号付きの大きさではなく、2の補数を使用するためです。否定するには、すべてのビットを反転してから1つ追加する必要があります。

単項マイナスを使用してください。お願い...かなりお願いします。

編集:なんらかの奇妙な理由でビット単位の演算でこれを行う必要がある場合は、次のようにする必要があります。

Dim somewhatCorrect = (Short.MaxValue xor Short.MinValue) + 1;

もちろん、ビット単位の演算子では2の補数の否定を効率的に実行できないため、ビット単位ではありません。

EDIT2:そしてここに単項マイナスがあります:

Dim correct = -Short.MaxValue;

EDIT3:編集された質問への回答

Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue
于 2010-07-08T00:37:25.200 に答える
1

2 の補数

Dim testV As Short = &HD555S 'a test value

Dim twosC As Short 'twos comp

twosC = (testV Xor &HFFFFS) + 1S 'reverse the bits, add 1

最上位ビットの変更

twosC = twosC Xor &H8000S
于 2010-07-08T12:35:20.307 に答える