得到一个字节的二进制补码

时间:2013-11-27 18:40:13

标签: vb.net bit-manipulation xor twos-complement

Two's compliment是指翻转字节中的每个位,然后将“1”添加到结果中。

我不想提取每一位并翻转它。有一个简单的方法吗?

5 个答案:

答案 0 :(得分:1)

您可以将字节转换为负值(将其转换为整数后):

b = CByte(-CSHort(b) And &HFF)

答案 1 :(得分:0)

您可以简单地将字节与255进行异或,然后添加一个。

Dim myByte1 As Byte = 5
Dim myByte2 As Byte = 255
Dim MyTwosComplement As Byte

MyTwosComplement = myByte1 Xor myByte2
MyTwosComplement = CByte(MyTwosComplement + 1)

答案 2 :(得分:0)

你可以使用另一个定义作为二进制补码:2^n - b其中n是位数。

Function TwosComplement(b As Byte) As Byte
    Return CByte((256 - b) And &HFF)
End Function

答案 3 :(得分:0)

怎么样

 Dim b as Byte = 5
 Dim twosCompliment As Byte = (Not b) + 1

答案 4 :(得分:0)

Option Explicit On
Option Strict On

...

Public Function TwosComplement(value As Byte) As Byte
    If value = 0 Then Return 0 Else Return CByte(CByte(value Xor Byte.MaxValue) + 1)
End Function