原始问题改变了。

我想在左侧关闭左侧的最短价值(&H8000),然后将其他零件视为原样。

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

位于位运算符的方法没有任何较短的方法吗?

当我做

Dim a = Short.MaxValue Or &H8000

我遇到了一个编译器错误,因为它上升了,而不是否定它。

有帮助吗?

解决方案

那是因为.NET使用两个的补充,而不是签名的幅度。要否定,你必须翻转 全部 钻头,然后添加一个。

只需使用一元减去即可。请...

编辑:如果出于某种奇怪的原因,您必须使用位操作执行此操作,则必须这样做:

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

当然,哪个仍然不是捷径,因为两者的补充否定无法通过位运算符有效地完成。

edit2:这是一个单一的负:

Dim correct = -Short.MaxValue;

edit3: 回答编辑的问题:

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

其他提示

两个人的补充

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