As an example it is not at ALL clear to most people that ~2<<10 != ~(2<<10)
Although I suppose that's the point of a method name.
/** * A simple way to implement a toggle switch using an integer to store the state * and bitwise operators to manipulate the toggle * * @author Dan Fishman http://www.fishdan.com * * This code released to the public under the CreativeCommons 3.0 license by * the author on 8/21/2011 * * http://creativecommons.org/licenses/by/3.0/ */ public class TestToggle { public static int toggleState=0; public static void main(String argv[]){ for(int x=0;x<32;x++){ System.out.println(x+":"+Integer.toBinaryString(toggleState)); System.out.println(x+":"+Integer.toBinaryString(2 << x)); toggle(true,x); System.out.println("-----------------------"); System.out.println(x+":"+Integer.toBinaryString(toggleState)); System.out.println("isOn "+x+" == "+toggleIsOn(x)); toggle (false,x); System.out.println("isOn "+x+" == "+toggleIsOn(x)); System.out.println(""); } //PAY ATTENTION TO THESE TWO LINES order of operations can be tricky in bitwise // see http://www.uni-bonn.de/~manfear/javaoperators.php System.out.println("**"+Integer.toBinaryString(~2<<10)); System.out.println("**"+Integer.toBinaryString(~(2<<10))); } /** * if onOff==true we set the value at pos == 1 aka on * else we set it to 0; * @param onOff * @param pos */ public static void toggle(boolean onOff, int pos){ if(onOff==true){ toggleState |= 2 << pos; } else{ toggleState &= ~(2<<pos); } } public static boolean toggleIsOn(int x){ return (toggleState & 2<<x) == 2<<x; } }
No comments :
Post a Comment