aboutsummaryrefslogtreecommitdiff
path: root/reverse_bits.c
diff options
context:
space:
mode:
authorJack Sangdahl <[email protected]>2025-03-10 00:33:44 -0600
committerJack Sangdahl <[email protected]>2025-03-10 00:33:44 -0600
commit5d7cdc215e4ba1ec4cbb24c084cccb5e5e641468 (patch)
tree74f94bac0419cc98d52f388db819d90531ece969 /reverse_bits.c
parentcd3a0671a09d5e70567c2246a79018336f5680ac (diff)
downloadleetcode-5d7cdc215e4ba1ec4cbb24c084cccb5e5e641468.tar.gz
leetcode-5d7cdc215e4ba1ec4cbb24c084cccb5e5e641468.zip
190. reverse bits
Diffstat (limited to 'reverse_bits.c')
-rw-r--r--reverse_bits.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/reverse_bits.c b/reverse_bits.c
new file mode 100644
index 0000000..d6bd60c
--- /dev/null
+++ b/reverse_bits.c
@@ -0,0 +1,35 @@
+// 190. Reverse Bits
+#include "leetcode.h"
+#include <stdio.h>
+
+/*
+ * reverse the bitof a given 32 bits unsigned integer.
+ */
+
+uint32_t reverseBits(uint32_t n) {
+ n = ((n & 0xFFFF0000) >> 16) | ((n & 0x0000FFFF) << 16);
+ n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8);
+ n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4);
+ n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2);
+ n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1);
+ return n;
+}
+
+int main() {
+ uint32_t n1 = 0b00000010100101000001111010011100;
+ uint32_t n2 = 0b11111111111111111111111111111101;
+ uint32_t r1 = reverseBits(n1);
+ uint32_t r2 = reverseBits(n2);
+ printf("%d (", r1); // expect: 964176192 (00111001011110000010100101000000)
+ while (r1) {
+ printf("%d", r1 & 1 ? 1 : 0);
+ r1 >>= 1;
+ }
+ printf(")\n");
+ printf("%d (", r2); // expect: 3221225471 (10111111111111111111111111111111)
+ while (r2) {
+ printf("%d", r2 & 1 ? 1 : 0);
+ r2 >>= 1;
+ }
+ printf(")\n");
+}