Skip to content

Commit d3aec9c

Browse files
committed
reverse bits solution
1 parent 780e017 commit d3aec9c

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

reverse-bits/hyer0705.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// 8비트로 쪼갠 방법
2+
function reverseBits(n: number): number {
3+
const TOTAL_BITS = 32;
4+
const BITS_IN_BYTE = 8;
5+
const BYTES_IN_INTEGER = TOTAL_BITS / BITS_IN_BYTE;
6+
const BYTE_MASK = 0xff;
7+
8+
let result = 0;
9+
10+
const reversedByteCache: number[] = Array.from({ length: 2 ** BITS_IN_BYTE }, (_, n) => {
11+
let reversedNum = 0;
12+
13+
for (let i = 0; i < BITS_IN_BYTE; i++) {
14+
const bit = (n >>> i) & 1;
15+
reversedNum |= bit << (BITS_IN_BYTE - 1 - i);
16+
}
17+
18+
return reversedNum;
19+
});
20+
21+
for (let i = 0; i < BYTES_IN_INTEGER; i++) {
22+
const byte = (n >>> (i * BITS_IN_BYTE)) & BYTE_MASK;
23+
24+
const reversed = reversedByteCache[byte];
25+
result |= reversed << (TOTAL_BITS - (i + 1) * BITS_IN_BYTE);
26+
}
27+
28+
return result >>> 0;
29+
}
30+
31+
// 32번 연산 방법
32+
function reverseBits(n: number): number {
33+
const BITS_LEN = 32;
34+
35+
let reversed = 0;
36+
37+
for (let i = 0; i < BITS_LEN; i++) {
38+
const bit = (n >>> i) & 1;
39+
40+
const reversedPosition = 31 - i;
41+
reversed |= bit << reversedPosition;
42+
}
43+
44+
return reversed >>> 0;
45+
}

0 commit comments

Comments
 (0)