-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path190. Reverse Bits.js
27 lines (20 loc) · 1.49 KB
/
190. Reverse Bits.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Reverse bits of a given 32 bits unsigned integer.
// Note:
// Note that in some languages, such as Java, there is no unsigned integer type. In this case, both input and output will be given as a signed integer type. They should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned.
// In Java, the compiler represents the signed integers using 2's complement notation. Therefore, in Example 2 above, the input represents the signed integer -3 and the output represents the signed integer -1073741825.
// Example 1:
// Input: n = 00000010100101000001111010011100
// Output: 964176192 (00111001011110000010100101000000)
// Explanation: The input binary string 00000010100101000001111010011100 represents the unsigned integer 43261596, so return 964176192 which its binary representation is 00111001011110000010100101000000.
// Example 2:
// Input: n = 11111111111111111111111111111101
// Output: 3221225471 (10111111111111111111111111111111)
// Explanation: The input binary string 11111111111111111111111111111101 represents the unsigned integer 4294967293, so return 3221225471 which its binary representation is 10111111111111111111111111111111.
const reverseBits = x => {
n = ((x >> 1) & 0x55555555) | ((n & 0x55555555) << 1)
n = ((x >> 2) & 0x33333333) | ((n & 0x33333333) << 2)
n = ((x >> 4) & 0x0f0f0f0f) | ((n & 0x0f0f0f0f) << 4)
n = ((x >> 8) & 0x00ff00ff) | ((n & 0x00ff00ff) << 8)
n = (n >>> 16) | (n << 16)
return n >>> 0
}