Two's compliment是指翻转字节中的每个位,然后将“1”添加到结果中。
我不想提取每一位并翻转它。有一个简单的方法吗?
答案 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