剰余のうんちく
はじめに
方向を以下のように定義しておく
- 上(0度):0
- 右(90度):1
- 下(180度):2
- 左(270度):3
すると、90*n度回転させる処理はそのまま足し算で実行できる。
だが、1回転した場合0-3に正規化する必要がある。
この処理のお話。
剰余の限界
この正規化を行う為にすぐ思い付くのは、剰余を使い、
n%4
とすることである。
問題はこのnがマイナスになった場合で、例えば-1%4とかやると、処理系によって解が異なる。
Javaさん冗談ですよね。
結局こうした
ところで4って2進数だと100だよね。その余りってこうやったら求められないかい?
n&3
nがマイナスでも、これは処理系に依存せず、正剰余を返す。(詳しくはコンピュータの負数表現なんかを調べてくれ)
わーい(パチパチ
補足
ところでJavaとかGroovyで正剰余を計算する方法は無いんですかね