組込み機器から送られてくるデータ、例えばBluetoothやUSBなどで通信するような場合です。
short
、unsigned short
が16bitのシステムでの例です。
通信で数値が送られてくる場合、それが(signed)short
なのか、unsigned short
なのかはわかりません。
送られてくる数値が0x7fff
までならいいですが、0x8000
からが危険です。
Swiftに用意されている16bit値を扱うInt16
は、文字どおり符号付きの数値を扱うため、例えば組込み機器から受け取った0xffff
をそのままInt16(0xffff)
としてオブジェクトを作るとエラーになります。
Swiftでの整数0xffff
は0x0000_0000_0000_ffff
と同意で、10進数で65,535です。符号付き16bitの最大値である32,767を超えています。
だけど、0xffffは-1として扱って欲しい...
その時は、こうやって初期化します。
Int16(truncatingIfNeeded: 0xffff)
これでオブジェクトの値は-1になります。