implement bit swapping
This commit is contained in:
parent
a399de663f
commit
115ed2efbf
@ -62,20 +62,11 @@ public class SPN {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int swapBits(int x, int a, int b) {
|
public int swapBits(int x, int a, int b) {
|
||||||
int tmpA = (x & (0x1 << (15 - a)));
|
a = 15 - a;
|
||||||
int tmpB = (x & (0x1 << (15 - b)));
|
b = 15 - b;
|
||||||
|
|
||||||
tmpA = tmpA == 0 ? 0 : 1;
|
x ^= (1 << a);
|
||||||
tmpB = tmpB == 0 ? 0 : 1;
|
x ^= (1 << b);
|
||||||
|
|
||||||
tmpA = tmpA << (15 -b);
|
|
||||||
tmpB = tmpB << (15 - a);
|
|
||||||
|
|
||||||
x = x | tmpA;
|
|
||||||
x = x | tmpB;
|
|
||||||
|
|
||||||
// x = tmpA == 0 ? (x & 0x1 << 15 - b) | 0b0 : (x & 0x1 << 15 - b) | ~0b0;
|
|
||||||
// x = tmpB == 0 ? (x & 0x1 << 15 - a) | 0b0 : (x & 0x1 << 15 - a) | ~0b0;
|
|
||||||
|
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
@ -43,11 +43,13 @@ class SPNTest {
|
|||||||
int r = 0xC;
|
int r = 0xC;
|
||||||
|
|
||||||
// when
|
// when
|
||||||
int y = spn.swapBits(x, 1, 2);
|
int y = spn.swapBits(x, 13, 14);
|
||||||
int yy = spn.swapBits(x, 2, 1);
|
int yy = spn.swapBits(x, 14, 13);
|
||||||
|
int yyy = spn.swapBits(x, 14, 14);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertEquals(r, y);
|
assertEquals(r, y);
|
||||||
assertEquals(r, yy);
|
assertEquals(r, yy);
|
||||||
|
assertEquals(x, yyy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user