位运算奇巧淫技--获取某数二进制某位是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

 

posted @ 2023-01-06 15:36  阿飞藏泪  阅读(661)  评论(0编辑  收藏  举报
1 2 3
4