Negation
by Isai Damier, Android Engineer @ Google
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /*************************************************************************** * Author: Isai Damier * Title: Negation * Project: geekviewpoint * Package: algorithms * * Statement: * Given a set of bits, x, find its negation. * * Sample Input: 0101100 * Sample Output: 1010011 * * Technical Details: * The negation of a set x is the set comprising all the elements in the * universe that are not in x. For example if the context is all the * ciphers in the decimal system and s1 = [0,2,5,8] then the negation of * s1 is [1,3,4,6,7,9]. For a set of bits the negation is simply the * bitwise NOT of the set. For example if x = 0110101 then the * negation of x is 1001010. * * Alternate Algorithm: * The negation of a set of bits x may also be calculated as ALL_BITS ^ x, * where ^ is the bitwise XOR operator. For example, if x = 0110101 then * perforce ALL_BITS = 1111111. Hence, negative x = 1111111^0110101=1001010 * * JAVA Note: * Java does not support unsigned numbers. Therefore, there are times when * ~x must be replaced with ALL_BITS^x in order to work properly. The * programmer must define ALL_BITS. If x is an integer, for example, then * ALL_BITS is a string of sixteen ones. **************************************************************************/ public int negation( int x) { int u = Integer.parseInt( "" 1111111111111111 "" , 2 ); return u^x; // or return ~x } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import org.junit.Test; import static org.junit.Assert.*; public class BitwiseTest { /** * Test of negation method, of class Bitwise. */ @Test public void testNegation() { System.out.println( "" negation "" ); int x = Integer.parseInt( "" 1111111111111010 "" , 2 ); int r = Integer.parseInt( "" 0000000000000101 "" , 2 ); int u = Integer.parseInt( "" 1111111111111111 "" , 2 ); Bitwise bits = new Bitwise(); assertEquals(r, bits.negation(x)); assertEquals(x, bits.negation(r)); assertEquals(u ^ x, r); } } |