2016-04-22 7 views
-3

Ich versuche, einige Swift-Code in Javascript zu konvertieren, aber haben eine Beule getroffen, weil ich nicht weiß, was einige dieser Operatoren in Swift tun, so kann ich es nicht in seine analoge Javascript-Form konvertieren . Hier ist der Code:Swift Betreiber Erklärung

private var portMasks = [UInt8](count: 3, repeatedValue: 0) 

var newMask = UInt8(newState.rawValue * Int(powf(2, Float(pinIndex)))) 
portMasks[Int(port)] &= ~(1 << pinIndex) //prep the saved mask by zeroing this pin's corresponding bit 
newMask |= portMasks[Int(port)] //merge with saved port state 
portMasks[Int(port)] = newMask 
data1 = newMask<<1; data1 >>= 1 //remove MSB 
data2 = newMask >> 7 //use data1's MSB as data2's LSB 

Wo pinIndex haben port definiert bereits und sind sowohl UInt8.

Ich bin nicht auf der Suche nach der tatsächlichen Umwandlung - ich kann das selbst tun. Ich suche nur nach einer Erklärung dessen, was jede dieser Zeilen von einem mathematischen/programmatischen Standpunkt aus tut.

+4

Alle Swift-Operatoren sind in der Referenz ausführlich dokumentiert: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html#//apple_ref/doc/uid/TP40014097-CH27 -ID28. –

+0

Danke für diesen Link! Es hat einige der Operatoren, aber es fehlt '>> =' und '| =' –

+1

Sie haben keine Frage zu Swift gestellt, bevor Sie nicht wenigstens die Dokumentation durchforsteten, oder? :) –

Antwort

0

einen neuen Spielplatz starten und diese im Inneren kopieren:

var port: UInt8 = 1 
var pinIndex: UInt8 = 2 
var newState: Int = 23 

var portMasks = [UInt8](count: 3, repeatedValue: 0) 

var newMask = UInt8(newState * Int(powf(2, Float(pinIndex)))) 
portMasks[Int(port)] &= ~(1 << pinIndex) //prep the saved mask by zeroing this pin's corresponding bit 
newMask |= portMasks[Int(port)] //merge with saved port state 
portMasks[Int(port)] = newMask 
var data1 = newMask<<1; data1 >>= 1 //remove MSB 
var data2 = newMask >> 7 //use data1's MSB as data2's LSB 

Sie werden die Auswirkungen auf der rechten Seite sehen.

<< >> move bits by that amount 
| logical or 
& logical and 
~ logical negation 

Denken Sie, das ist alles, was hier verwendet wird. Grundsätzlich bearbeitet Ihr Code einzelne Bits (referenziert durch 1 < < bitPosition) und schaltet sie entweder ein oder aus.

Diese beiden Linien bedeuten das gleiche:

variable OPERATOR= something 
variable = variable OPERATOR something 

Würde sich ein wenig spielen vorschlagen und dann mit speziellen Fragen zurückkommen.

+0

Danke dafür! Lass mich das überprüfen –