在Swift中将signed转换为unsigned

Geo*_*rge 9 types operands swift

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

uint8_t value = 0
int delta = -1
uint8_t result = value + delta  /* result will be 0xFF */
Run Code Online (Sandbox Code Playgroud)

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

let value: UInt8 = 0
let delta: Int = -1
var result: UInt8 = value + delta  // Error, even typecasting in different ways... 
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Mar*_*n R 23

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

let delta: Int8 = -1
let result: UInt8 = UInt8(bitPattern: delta) // 0xFF = 255
Run Code Online (Sandbox Code Playgroud)


Rob*_*ier 6

(我认为你的例子有点偏离.0 - -1是1.我相信这个答案正是你所想的).

您希望选择与&-运营商进行溢出:

let value: UInt8 = 0
let delta: UInt8 = 1
let result: UInt8 = value &- delta
Run Code Online (Sandbox Code Playgroud)

还有类似的事情,你可以与其他做&运营商一样&+,&*等等.甚至还有一个&/由零处理鸿沟.

  • 使用更正的示例代码,另一个答案更好,但无论如何这是有用的信息.谢谢! (2认同)