aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-09-20 23:51:40 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-09-20 23:51:40 +0800
commit65168bf9a55680ce7e26cda04157c827863641aa (patch)
tree50fe5d177167e1802927d8cdbb7592bfec44ee06
parent1e5e8748ede1926bcb637463b330c955bec2b8e7 (diff)
downloaddatalab2026-65168bf9a55680ce7e26cda04157c827863641aa.tar.gz
datalab2026-65168bf9a55680ce7e26cda04157c827863641aa.tar.xz
optimize reverse
-rw-r--r--bits.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/bits.c b/bits.c
index b4a41ff..0182646 100644
--- a/bits.c
+++ b/bits.c
@@ -117,16 +117,21 @@ int byteSwap(int x, int n, int m) {
* Difficulty: 3
*/
unsigned reverse(unsigned v) {
- unsigned res = 0;
- int i = 32;
+ v = ((v >> 1) & 0x55555555) |
+ ((v & 0x55555555) << 1);
- while (i) {
- res = (res << 1) | (v & 1);
- v = v >> 1;
- i--;
- }
+ v = ((v >> 2) & 0x33333333) |
+ ((v & 0x33333333) << 2);
- return res;
+ v = ((v >> 4) & 0x0F0F0F0F) |
+ ((v & 0x0F0F0F0F) << 4);
+
+ v = ((v >> 8) & 0x00FF00FF) |
+ ((v & 0x00FF00FF) << 8);
+
+ v = (v >> 16) | (v << 16);
+
+ return v;
}
/*