aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-09-20 23:30:08 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-09-20 23:30:08 +0800
commite78d250e1fb73184d895b9663affb0e0f675b129 (patch)
treec83ed97ce37b8e4f96018897c647fcddf866eaa9
parent8dc87e8d58730cd93b1da80f02863398ff8e2dae (diff)
downloaddatalab2026-e78d250e1fb73184d895b9663affb0e0f675b129.tar.gz
datalab2026-e78d250e1fb73184d895b9663affb0e0f675b129.tar.xz
optimize byteSwap
-rw-r--r--bits.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/bits.c b/bits.c
index 0be410f..e280f1e 100644
--- a/bits.c
+++ b/bits.c
@@ -101,19 +101,11 @@ int logtwo(int v) {
* Difficulty: 2
*/
int byteSwap(int x, int n, int m) {
- int ns = (n << 3) ;
- int ms = (m << 3);
- int nb = (x >> ns) & 0xFF;
- int mb = (x >> ms) & 0xFF;
+ int ns = n << 3;
+ int ms = m << 3;
+ int diff = ((x >> ns) ^ (x >> ms)) & 0xFF;
- int mask = ~((0xFF << ns) | (0xFF << ms));
-
- x = x & mask;
-
- x = x | (nb << ms);
- x = x | (mb << ns);
-
- return x;
+ return x ^ (diff << ns) ^ (diff << ms);
}
/*