Vb.net 打开最左边的一个短路位
原始问题已更改。 我希望按位关闭短值(&H8000)的最左边的位,并保持其他位不变Vb.net 打开最左边的一个短路位,vb.net,bit-manipulation,bitwise-operators,negation,negate,Vb.net,Bit Manipulation,Bitwise Operators,Negation,Negate,原始问题已更改。 我希望按位关闭短值(&H8000)的最左边的位,并保持其他位不变 Dim x = BitConverter.GetBytes(Short.MaxValue Or &H8000) Dim z = BitConverter.ToInt16(x, 0) 有没有比按位运算符更短的方法 当我这样做的时候 Dim a = Short.MaxValue Or &H8000 我得到一个编译器错误,因为它上升了,而不是否定它。这是因为.NET使用2的补码,而不是有符号的大小。
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的补码求反
这是一个一元负号:
Dim correct = -Short.MaxValue;
编辑3:在回答编辑后的问题时:
Dim x As Short = 42
Dim xWithHighBitOn = x Or Short.MinValue
这是因为.NET使用2的补码,而不是符号大小。要求反,必须翻转所有位,然后添加一位 请使用一元负号。求你了…求你了 编辑:如果出于某种奇怪的原因,必须使用位操作执行此操作,则必须执行以下操作:
Dim somewhatCorrect = (Short.MaxValue xor Short.MinValue) + 1;
当然,它仍然不是按位的,因为用按位运算符不能有效地完成2的补码求反
这是一个一元负号:
Dim correct = -Short.MaxValue;
编辑3:在回答编辑后的问题时:
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
二元补码
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
那么,有没有一种方法可以通过操作员来实现呢?我只是想让上面的解释变得不那么严格,既然我不是大比特人,我怎么能满足你的要求呢operator@Shimmy:否。不能使用
或或XOR
对数字求反。你必须对数字进行位反转,然后再加一求反。@Shimmy:我是说不要用位运算符进行此操作。y,因为这样会有更多的运算并转换为int?我只是想知道,有没有办法和接线员联系?我只是想让上面的解释变得不那么严格,既然我不是大比特人,我怎么能满足你的要求呢operator@Shimmy:否。不能使用或或XOR
对数字求反。你必须对数字进行位反转,然后再加一求反。@Shimmy:我是说不要用位运算符进行此操作。y,因为这样会有更多的运算并转换为int?我只是想知道