【问题标题】:How to calculate Decimal number of one's compliment in swift?如何快速计算一个恭维的十进制数?
【发布时间】:2019-01-06 18:49:41
【问题描述】:

我有一个十进制数,我想将该数字的前 8 位转换为一个补码(即使它超过 8 位)..

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

当我对前 8 位进行补充时,它变成了 1000 0110,这个二进制的十进制数是 134 ..

我正在尝试以编程方式实现这一点,请提前帮助..谢谢。

【问题讨论】:

    标签: swift binary hex decimal


    【解决方案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 进行异或运算来执行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
    

    【讨论】:

    • 感谢您的帮助.. 在我尝试将其转换为十六进制值并尝试将其添加到数据对象之后.. 让 n = 585 让结果 = 255 - n % 256 let hexValue = String(result, radix: 16) var returnMsg = "[1,1,1, ,#77888990".data(using: .utf8) as!数据 returnMsg.append(UInt8(hexValue)!) // 这里它正在崩溃 bcz 十六进制值 b6 有什么帮助吗?提前致谢
    • 这是 Stack Overflow 的另一个问题。将它与您尝试过的内容和您期望的结果一起发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2012-05-16
    • 2016-12-20
    • 2016-01-07
    • 2019-04-29
    相关资源
    最近更新 更多