aboutsummaryrefslogtreecommitdiff
path: root/bits.c
diff options
context:
space:
mode:
Diffstat (limited to 'bits.c')
-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);
}
/*