diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-09-20 23:51:40 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-09-20 23:51:40 +0800 |
| commit | 65168bf9a55680ce7e26cda04157c827863641aa (patch) | |
| tree | 50fe5d177167e1802927d8cdbb7592bfec44ee06 | |
| parent | 1e5e8748ede1926bcb637463b330c955bec2b8e7 (diff) | |
| download | datalab2026-65168bf9a55680ce7e26cda04157c827863641aa.tar.gz datalab2026-65168bf9a55680ce7e26cda04157c827863641aa.tar.xz | |
optimize reverse
| -rw-r--r-- | bits.c | 21 |
1 files changed, 13 insertions, 8 deletions
@@ -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; } /* |
