質問

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

私は左の左を少しずつオフにして、短い値(&H8000)をオフにし、他のビットをそのまま残したいと思います。

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

ビットワイズオペレーターでより短い方法はありませんか?

私がする時

Dim a = Short.MaxValue Or &H8000

コンパイラエラーが発生します。

役に立ちましたか?

解決

それは、.NETが署名された大きさではなく、2つの補数を使用しているためです。否定するには、ひっくり返さなければなりません すべて ビット、そしてそれを追加します。

お願いします 単位マイナスを使用するだけです。お願いします...かなりお願いします。

編集:何らかの奇妙な理由で、ビットワイズ操作でこれを行う必要がある場合、これを行う必要があります。

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

2つの補完否定をビットワイズ演算子で効率的に行うことができないため、もちろんビットワイズではありません。

edit2:そして、これが単位のマイナスです:

Dim correct = -Short.MaxValue;

編集3: 編集された質問への応答:

Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue

他のヒント

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top