【问题标题】:Converting signed to unsigned in Swift在 Swift 中将有符号转换为无符号
【发布时间】:2014-10-29 06:48:42
【问题描述】:

在 C 中,我可以用数字做一个技巧:

uint8_t value = 0
int delta = -1
uint8_t result = value + delta  /* result will be 0xFF */

有没有办法在 Swift 中做同样的事情?请注意,相同的方法不起作用:

let value: UInt8 = 0
let delta: Int = -1
var result: UInt8 = value + delta  // Error, even typecasting in different ways... 

有没有办法在 Swift 中获取 C 的减法行为?

谢谢!

【问题讨论】:

    标签: types swift operands


    【解决方案1】:

    所有有符号和无符号整数类型都有一个bitPattern: 构造函数, 它从一个有符号(或反之亦然)创建一个无符号数,具有相同的 内存表示:

    let delta: Int8 = -1
    let result: UInt8 = UInt8(bitPattern: delta) // 0xFF = 255
    

    【讨论】:

    • 只需要更正一次,我看到:需要'UInt8(bitPattern: Int8(delta))' 而不是简单的'UInt8(bitPattern: delta)'(或者delta需要是Int8)。
    【解决方案2】:

    (我认为您的示例有点偏离。0 - -1 是 1。不过,我相信这个答案就是您的想法)。

    您想使用 &- 运算符选择加入溢出:

    let value: UInt8 = 0
    let delta: UInt8 = 1
    let result: UInt8 = value &- delta
    

    您可以使用其他 & 运算符(如 &+&* 等)执行类似的操作。甚至还有一个处理除以零的 &/

    【讨论】:

    • 哦!抱歉...代码错误(输入速度太快...)。现已更正。
    • 使用更正的示例代码,其他答案效果更好,但无论如何这是有用的信息。谢谢!
    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多