【发布时间】:2019-01-06 18:49:41
【问题描述】:
我有一个十进制数,我想将该数字的前 8 位转换为一个补码(即使它超过 8 位)..
例如,我有数字 633,而我将其转换为二进制形式,它将是 0010 0111 1001
当我对前 8 位进行补充时,它变成了 1000 0110,这个二进制的十进制数是 134 ..
我正在尝试以编程方式实现这一点,请提前帮助..谢谢。
【问题讨论】:
我有一个十进制数,我想将该数字的前 8 位转换为一个补码(即使它超过 8 位)..
例如,我有数字 633,而我将其转换为二进制形式,它将是 0010 0111 1001
当我对前 8 位进行补充时,它变成了 1000 0110,这个二进制的十进制数是 134 ..
我正在尝试以编程方式实现这一点,请提前帮助..谢谢。
【问题讨论】:
你甚至可以在不转换为二进制的情况下做到这一点:
let n = 633
let result = 255 - n % 256
print(result) // 134
用256 修改数字会产生低8 位,然后从255 中减去该数字会得到1 的补码。
使用& 255或& 0xff获取低8位也可以得到同样的结果:
let result = 255 - n & 255
您还可以使用^ 运算符通过与255 进行异或运算来执行1 的补码:
let result = (n & 255) ^ 255
如果你坚持转换成二进制并做补码,那么你可以这样做:
let n = 633
let binary = String(n, radix: 2)
let lowbits = ("0000000" + binary).suffix(8)
let complement = String(lowbits.map { $0 == "0" ? "1" : "0" })
let result = Int(complement, radix: 2)!
print(result) // 134
【讨论】: