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 シフトする時は、論理シフトすべきなのか算術シフトすべきなのかは、意識しておきたい。