如何快速计算人称赞的小数?

时间:2018-07-30 13:41:12

标签: swift binary hex decimal

我有一个十进制数字,我想将该数字的前8位转换为一个称赞(即使大于8位的数字也是如此)。

例如,我将数字633转换为二进制形式时,它将是0010 0111 1001

当我对前8位进行补码时,它变为1000 0110,此二进制的十进制数为134 ..

我正在尝试通过编程方式实现这一目标,请提前提供帮助。

1 个答案:

答案 0 :(得分:1)

您甚至无需转换为二进制即可完成此操作:

let n = 633
let result = 255 - n % 256
print(result) // 134

256修改数字将产生低阶8位,并从255减去数字将执行1的补码。

您可以通过使用& 255& 0xff来获得低阶8位来获得相同的结果:

let result = 255 - n & 255

您还可以通过使用255运算符对^进行XOR运算来执行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