左端のビットを短くします
-
02-10-2019 - |
質問
元の質問が変更されました。
私は左の左を少しずつオフにして、短い値(&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
所属していません StackOverflow