位运算奇巧淫技--获取某数二进制某位是1还是0
题目:
现有一个二进制数,如何快速判断某位(从右往左数)是0还是1?
方法有两种
方式一:
先将数字右移指定第i位,然后再用&与1运算
1 public static int and2(int num, int i) { 2 // 先将数字右移指定第i位,然后再用&与1运算 3 return num >> (i-1) & 1; 4 }
方式二:
先将1左移到指定的第i位,然后在用与&判断是否是1。最后右移第i位回去。
1 public static int and(int num, int i) { 2 // 先将1左移到指定的第i位,然后在用与&判断是否是1。最后右移第i位回去。 3 return (1 << (i-1) & num) >> (i-1); 4 }
示例:
那整数100来说,它的二进制数是1100100,求第5位(从右往左数)二进制数是0还是1,可将1100100&10000得出,结果为0。具体程序实现可以是,将1左移4位,与运算后再右移四位,再判断结果。
1 public class A { 2 public static void main(String[] args) { 3 String str = ((100&(1<<4))>>4)==0?"0":"1"; 4 System.out.println("100的第5位二进制是"+str); 5 } 6 } 7 //100的第5位二进制是0