在Swift中将signed转换为unsigned

时间:2014-09-04 13:30:48

标签: types swift operands

在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的减法行为?

谢谢!

2 个答案:

答案 0 :(得分:23)

所有有符号和无符号整数类型都有一个bitPattern:构造函数, 它使用相同的符号创建一个带符号的无符号数(反之亦然) 记忆表示:

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

答案 1 :(得分:6)

(我认为你的例子稍微有些偏差。0 - -1是1.我相信这个答案就是你想到的。)

您希望使用&-运算符选择加溢:

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

您可以对其他&运营商执行类似的操作,例如&+&*等。甚至还有&/处理除以零。