Wenn Sie die bitweisen Verschiebeoperatoren verwenden, müssen Sie die Größe des zu verschiebenden Werts in Bits um kleiner als verschieben. In diesem Fall versuchen Sie, eine UInt8
um 8 Bits zu verschieben - was außerhalb dieses Bereichs liegt.
Der Grund, warum es für print(5<<8) -> 1280
funktioniert, ist, weil Swift diese Typen von Int
ableitet - und deshalb wird es entweder 32 oder 64 Bit sein, abhängig von der Plattform. Weil 8 weniger ist, wird es funktionieren.
Wenn Sie werfen ausdrücklich die 5
-UInt8
, werden Sie ein Compiler Fehler sagen erhalten:
jedoch
Shift-Betrag größer oder gleich Typ Größe in Bits, Es scheint, Swift ist nicht in der Lage, den gleichen Compilerfehler für Arrays zu liefern - nur einen Laufzeitfehler.
Die Lösung besteht daher darin, mit größeren Typen zu arbeiten. Abhängig davon, für was Sie diesen Code verwenden, möchten Sie möglicherweise ein UInt16
Array verwenden.
var test: [UInt16] = [5, 6, 7, 8]
Oder Sie, wenn Sie die verschobenen Werte unabhängig von der Array sind, können Sie werfen sie einfach auf einen größeren Typ vor der Verschiebung:
print(UInt16(test[0])<<8)
Obwohl Sie, dass Apple recommends you use Int
für Integer-Typen beachten sollten , auch wenn Ihre Werte bekanntlich nicht negativ sind - es sei denn, Sie müssen speziell mit Typen einer festen Größe arbeiten.
Thank u so much! Es ist sehr klar! – HungCLo
@HungCLo Glücklich zu helfen :) – Hamish