有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么按位AND运算不适用于值>=8?

这个程序检查给定的数字是否是2的幂。该代码在n=7之前正常工作,并为输入n<=八,

输入n=4; 产量:0; 预期产出:0

输入:n=8; 产出:104; 预期产出:0

 public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int n = input.nextInt();
    String s = Integer.toBinaryString(n);
    String s2 = Integer.toBinaryString(n-1);
    Integer i = Integer.parseInt(s);
    Integer j = Integer.parseInt(s2);
    System.out.println(i&j);
    input.close();
}

共 (2) 个答案

  1. # 1 楼答案

    通过调用toBinaryStringparseInt,可以将数字转换为二进制,然后将二进制解释为十进制,从而扭曲数字。跳过这个:

     public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println(n&(n-1));
        input.close();
    }
    
  2. # 2 楼答案

    intstring再到Integer的不必要转换。您可以直接按位执行int之间的操作。请参阅以下代码以了解操作以及二进制转换-

    public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
             System.out.print("Enter n : ");
            int n = input.nextInt();
            System.out.println("Number 1 : "+n);
            int n2= n-1;
            System.out.println("Number 2: "+n2);
            System.out.println("   Just to see the coressponding binary value     -");
            String binaryNumber1 = Integer.toBinaryString(n);
            System.out.println("Binary Number 1 : "+binaryNumber1);
            String binaryNumber2 = Integer.toBinaryString(n2);
            System.out.println("Binary Number 1 : "+binaryNumber2);
            System.out.println("                             -");
            System.out.println("Bitwise AND operation :  "+(n & n2));   //  actual AND operation perform here
            
           
            input.close();
    
        }
    

    输出

    Enter n : 13
              -
    Number 1 : 13
    Number 2: 12
       Just to see the coressponding binary value     -
    Binary Number 1 : 1101
    Binary Number 2 : 1100
                                 -
    Bitwise AND operation :  12