Java--位运算符举例

1基础


2交换两个变量值

详见 文章  Java–交换两数的值

3求绝对值

//用位运算符求一个整数(int型)的绝对值
public class Test {
    
    
    public static void main(String[] args) {
    
    
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int num = input.nextInt();

        //方法一:通过负数求反加1求
        int result1 = num >=0 ? num : ~num + 1;
        System.out.println("法一:此数的绝对值是:" + result1);

        //方法二:通过位运算求
        int temp = num >> 31;
        int result2 = (num ^ temp) - temp;
        System.out.print("法二:此数的绝对值是:" + result2);
    }
}

4求某一十进制数是否是2的正数次幂

//给出任意一个int 类型的正整数,如何快速判断该整数的值,是否是2的整数次幂?(考虑位运算符)
public class Test {
    
    
    public static void main(String[] args) {
    
    
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int num = input.nextInt();

        /*
        //输入的数用二进制来表示,若只有1个1,其余位全部为0,则是 2 的整数次幂,反之,则不是。
        //比如 8 = 1000 ,8&7 为 1000 & 0111 = 0000 ,是 2 的整数次幂。
        //与 二进制的 满2进1 有关
        if ((int)(num & (num - 1) )== 0)
            System.out.print("您输入的数是2的整数次幂");
        else
            System.out.print("您输入的数不是2的整数次幂");
         */

        //不采用位运算
        boolean flag = true;

        while (num != 1)
            if (num % 2 != 0) {
    
    
                flag = false;
                System.out.print("您输入的数不是2的整数次幂");
                break;
            }
            else
                num /= 2;

        if (flag)
            System.out.print("您输入的数是2的整数次幂");
    }
}

5求某一十进制数的补码中包含的1的个数

//一个十进制整数(int型)的二进制表示形式(补码)中,包含的1个数?
public class Test {
    
    
    public static void main(String[] args) {
    
    
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int num = input.nextInt();
        int count = 0;
        for (int i = 0;i < 8;i ++)	//8表示二进制的位数,可以设置成8,16,32,64等,结果也相应的不同。
            if ((num >>> i & 1) == 1)
                count ++;
            System.out.print(num + "的二进制补码形式中1的个数有 " + count + " 个。");
    }
}

猜你喜欢

转载自blog.csdn.net/xiaoyu_alive/article/details/122961016