2014-09-04 18 views
7

In C unterzeichnet Converting, ich bin in der Lage einen Trick mit Zahlen zu tun:zu unsigned in Swift

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

Gibt es eine Möglichkeit, das gleiche in Swift zu tun? Beachten Sie, dass der gleiche Ansatz nicht funktioniert:

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

Gibt es eine Möglichkeit C Verhalten für Substraktion in Swift zu bekommen?

Danke!

Antwort

22

Alle mit und ohne Vorzeichen Integer-Typen haben einen bitPattern: Konstruktor , die sie von einem signierten (oder umgekehrt) mit der gleichen Speicherrepräsentation eine Zahl ohne Vorzeichen erzeugt:

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

Das funktioniert. Vielen Dank! – George

+0

Nur eine Korrektur wird benötigt, ich sehe: 'UInt8 (bitPattern: Int8 (delta))' wird anstelle von einfach 'UInt8 (bitPattern: delta)' benötigt (oder Delta muss Int8 sein). – George

+0

@George: Sie haben Recht, korrigiert. –

6

(Ich denke, Ihr Beispiel ist ein wenig off. 0 - -1 ist 1. Ich glaube, diese Antwort ist, was Sie dachten, obwohl).

Sie wollen-in opt Überlauf mit dem &- Betreiber:

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

Es gibt ähnliche Dinge, die Sie mit den anderen & Operatoren wie &+ tun können, &* usw. Es gibt sogar eine &/, die Kluft Griffe durch Null.

+0

Oh! Entschuldigung ... Der Code war falsch (zu schnell tippen ...). Es ist jetzt korrigiert. – George

+2

Mit dem korrigierten Beispielcode funktioniert die andere Antwort besser, aber das ist sowieso nützliche Information. Vielen Dank! – George