そんな方法があったのか?!とちょっと感心した話。

0,1,2,3,4,5,6,7,0,1,2,3,4…のようにカウントアップorダウンして0未満もしくは一定の数以上の値になった場合、一定の数の剰余になるような処理を実装するとして、一定の数2のべき乗であったときの方法。

例えば、一定の数=8だった場合、
10→2
-2→6
となるようにするには…

なんか、0x7でマスクすれば良いみたい。
(ただ、変数の大きさには注意)

(00001010)2 :(10)10
(00000111)2 :(07)10 でマスクすると、
(00000010)2 :(02)10 となる。

同様に、
(11111110)2 :(-2)10
(00000111)2 :(07)10 でマスクすると、
(00000110)2 :(06)10 となる。

処理を見たとき前者の正の数の場合は予想が付いたのですが、
負の数に関しても大丈夫ということまでは考えが至りませんでした。

まだまだ知らないことが多いなぁと思った今日。

コメント

最新の日記 一覧

<<  2025年5月  >>
27282930123
45678910
11121314151617
18192021222324
25262728293031

お気に入り日記の更新

この日記について

日記内を検索