Swift3 負の数の剰余演算で負の数が返ってくるのは仕様

マイナスの剰余演算について情報が少なかったのでメモ。

目次

Swift3の剰余演算

Swiftでは%演算子がある。一般的には剰余演算と言われるものだ。

しかし、Swiftの%演算子は負の数に適用すると思いがけない結果になった。

let remain = -1 % 10
print(remain) // Print -1

こうなる。負の数が返されるのだ。Python3では、

remain = -1 % 10
print(remain) # Print 9

となり、正の数9が返される。

Swift3の%演算子

調べてみると、仕様らしい。負の数においては剰余演算ではないらしい。 The Swift Programming Language (Swift 3.1): Basic Operators中のRemainder Operator節に記載があった。

moduloでなく、remainderである、とのこと。

回避策

なので、負の数でPython3的な返却値を期待してはいけない。回避策は以下。

let dividend = -1
let divisor = 10
var remain = dividend % divisor
if remain < 0 {
    remain += divisor
}
print(remain) // Print 9

Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
石川 洋資 西山 勇世
技術評論社
売り上げランキング: 19,129



詳解Swift 第3版
詳解Swift 第3版
posted with amazlet at 17.05.08
荻原 剛志
SBクリエイティブ
売り上げランキング: 115,386
タイトルとURLをコピーしました