将位存储在 int 数组中

Storing bits in array of int

我需要创建一个方法

private static int[] inBinary(int number)

那 return 是一个数字的二进制表示并将其存储在一个数组中,没有任何额外的零。

示例:如果我有十进制数 2,它应该 return 其二进制值 10 而不是 001000000010

问题是我的代码(对于 dec 数字 2)returns 01(当我将其转换为 void 方法并仅打印 binary[i] 时),而不是 10。我的问题是,如何通过 "result" 变量 "reverse" while 循环的函数,使其 returns 10 而不是 01 以及如何将其全部存储在数组中。这是我目前所拥有的:

public static int[] inBinary(int number){
    if(number < 0){
        throw new IllegalArgumentException("Negative numbers not possible!");
    }
    int elements = 1; int result = 0; int[] binary = new int[elements]; 
    while(number != 0){
        elements++;
        result = number % 2;
             number /= 2;

             for(int i = 0; i < binary.length; i++){
                 binary[i] = result;

             }
    }
    return binary; 
  }
  public static void main (String[] args){
  System.out.println(inBinary(2));
  }
public static int[] shiftbits(int[] array){

    int[] shiftedArray = new int[array.length];
    int index = array.length - 1;
    for (int i = 0; i < array.length; i++) {
        shiftedArray[i] = array[index];
        index--;
    }

    return shiftedArray;

}

我尽力帮你解决了;我在某些部分使用了util.List,因为我们不知道结果二进制数有多长来为其定义一个数组。 reverse 方法用于反转二进制数组并删除多余的 zeors;这是完整的代码:

    public static void main(final String[] args) {

       System.out.println(reverse(inBinary(2)));
    }

    public static Integer[] inBinary(int number) {
       if (number < 0) {
          throw new IllegalArgumentException("Negative numbers not possible!");
       }
       int elements = 1;
       int result = 0;
       final List<Integer> binaryList = new ArrayList<Integer>();
       while (number != 0) {
          elements++;
          result = number % 2;
          number /= 2;
          binaryList.add(new Integer(result));
       }
       final Integer[] binary = new Integer[binaryList.size()];
       binaryList.toArray(binary);
       return binary;
   }

   static String reverse(final Integer arr[]) {
      boolean flag = false;
      String tmp = "";

      for (int i = arr.length - 1; i >= 0; i--) {
         if (arr[i].equals(new Integer(1)) && flag == false) {
             flag = true;
         }
         if (flag == true) {
             tmp += arr[i];
         }
      }
    return tmp;
  }

这是一个自制的解决方案。它的效率有点低,但是,它可以正常工作。另外,我可以解释一下:

public static int[] inBinary(int number) {
    // this will store the full binary array
    int[] binary = new int[Integer.SIZE];
    for (int i = Integer.SIZE - 1; 0 <= i; i--) {
        binary[i] = number % 2;
        // one shift to the right, basically divides with two
        // it's okay to change the incoming parameter as it's not a reference
        number = number >> 1;
    }

    // then we count the leading zeros
    int startIndex = 0;
    while (binary[startIndex] != 1) {
        startIndex++;
    }

    // Arrays.copyOfRange() is prohibited so we have to do it manually:
    // We allocate a shorter array
    int[] result = new int[Integer.SIZE - startIndex];
    // and copy the related numbers.
    for (int i = 0; i < Integer.SIZE - startIndex; i++) {
        result[i] = binary[startIndex + i];
    }

    return result;
}

您的程序的一个非常简化的工作版本:

public static void inBinary(int number){
    if(number < 0){
        throw new IllegalArgumentException("Negative numbers not possible!");
    }

   //create an empty list and fill binary digits in it
   List<Integer> binaryDigitsList = new ArrayList<Integer>(); 
   while(number != 0){
        int digit=number%2;
        binaryDigitsList.add(digit);
        number=number/2;
    }
    //now reverse the list and fill it in array
    int[] binaryArr = new int[binaryDigitsList.size()];
    for(int k=binaryDigitsList.size()-1, index=0; k>=0 ; k--){
        binaryArr[index]=binaryDigitsList.get(k);
        index++;
    }

    //print contents of array
    for(int index=0;index<binaryArr.length;index++)
        System.out.println("BinaryArray["+index+"] = "+binaryArr[index]); 
  }

Assuming you want to use an array. here an example

public class ExempleDecimalBinary2 {


      public static void main(String a[]){
             ExempleDecimalBinary2 obj = new ExempleDecimalBinary2();

             System.out.println("\nBinary for 2: ");
             obj.inBinary(2);
             System.out.println("\nBinary for 124: ");
             obj.inBinary(124);
             System.out.println("\nBinary for 45: ");
             obj.inBinary(45);
             System.out.println("\nBinary for 2147483647: ");
             obj.inBinary(2147483647);



          }
    public static void inBinary(int number){
        int binary[] = new int[1];

         int index = 0;
         while(number > 0){

             binary=(int[]) resizeArray (binary, index+1);

           binary[index++] = number%2;

           number = number/2;
         }

         for(int i = index-1;i >= 0;i--){

           System.out.print(binary[i]);
         }

    }



    private static Object resizeArray (Object oldArray, int newSize) {
           int oldSize = java.lang.reflect.Array.getLength(oldArray);
           Class elementType = oldArray.getClass().getComponentType();
           Object newArray = java.lang.reflect.Array.newInstance(
                 elementType, newSize);
           int preserveLength = Math.min(oldSize, newSize);
           if (preserveLength > 0)
              System.arraycopy(oldArray, 0, newArray, 0, preserveLength);
           return newArray; }
}