技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

leetCode:190. Reverse Bits

leetCodeの「190. Reverse Bits」を解いた。bit 演算の良い練習になったので、今後の参考のために、自分の解答をここに残しておく。
https://leetcode.com/problems/reverse-bits/

    public int reverseBits(int n) {
        int ans = 0;
        int len = 32;
        for (int i = 0; i < len; i++) {
            // 末尾の bit を取り出す。
            int lastBit = n & 1;

            // lastBit 追加のため、ans の末尾を空ける。
            ans <<= 1;

            // 末尾の bit を ans に追加。
            ans |= lastBit;

            // 次のループのために、取り出し済みの bit を捨てる。
            // ここでは論理シフトを使っているが、算術シフト (>>) でもOK。
            n >>>= 1;
        }
        return ans;
    }

この問題では気にする必要はないが、左に bit シフトする時は、論理シフトすべきなのか算術シフトすべきなのかは、意識しておきたい。