给定一个1,2,4,8等等中的某几个数之和,比如1,2,4的和是7,怎么逆运算根据7得到1,2,4?

解决方案 »

  1.   

    不知道你说的位运算是否是只要用位运算符呢?如果不是的话,实际上这个问题的本质就是将任意十进制数的转换为二进制:根据每个二进制位上的0/1,完成这个十进制数的逆运算:
    public void transferBi(int num) {
    // 接收二进制各位数
    List<Integer> bi = new ArrayList<Integer>();
    // 接收组成数
    List<Integer> numbers = new ArrayList<Integer>();
    // 计算组成数时,获取当前位的0/1值
    int number = 0;

    // 二进制转换
    while(num > 0) {
    bi.add(num%2);
    num = num/2;
    }

    // 计算组成数
    for(int i = 0; i < bi.size(); i++) {
    if((number = bi.get(i)) != 0) {
    numbers.add(number * (int)Math.pow(2, i));
    }
    }

    // 输出结果
    System.out.println("输入的数由这些数组成:");

    for(int i : numbers) {
    System.out.print(i + " ");
    }
    }
      

  2.   


    拿这个数字和 0x01 左移N位后位与即可得到。即 for (int i =0 ; i <32, i++){
    System.out.println ("get "+(input & (0x01<<i)));
    }
      

  3.   


    拿这个数字和 0x01 左移N位后位与即可得到。即 for (int i =0 ; i <32, i++){
    System.out.println ("get "+(input & (0x01<<i)));
    }
    学习了。还要加上一个判断,去除0值