13

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

谢谢!

4

2 回答 2

26

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

let delta: Int8 = -1
let result: UInt8 = UInt8(bitPattern: delta) // 0xFF = 255
于 2014-09-04T13:43:40.863 回答
6

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

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

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

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

于 2014-09-04T13:38:11.570 回答