在Swift中将有符号数转换为无符号数

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

谢谢!

2个回答

27

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

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

只需要进行一处更正,我看到:需要使用'UInt8(bitPattern: Int8(delta))'而不是简单的'UInt8(bitPattern: delta)'(或者delta需要是Int8类型)。 - George

6

我认为你的例子有点问题。 0 - -1 是 1。我相信这个答案是你想到的,尽管如此。

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

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

其他类似的运算符,例如&+&*等,也可以进行类似的操作。甚至还有一个&/运算符可以处理除以零的情况。


哦!抱歉...代码有误(打字太快了...)。现在已经更正。 - George
2
有了修正过的示例代码,另一个答案的效果更好,但这仍然是有用的信息。谢谢! - George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接