整数到二进制数组

我正在尝试将整数转换为7位布尔二进制数组。 到目前为止,代码不起作用:如果我输入要转换的整数8,而不是0001000我得到1000000,或者说15我应该得到0001111但我得到1111000.字符数组与二进制数组的长度不同这些立场是错误的。

public static void main(String[] args){ String maxAmpStr = Integer.toBinaryString(8); char[] arr = maxAmpStr.toCharArray(); boolean[] binaryarray = new boolean[7]; for (int i=0; i<maxAmpStr.length(); i++){ if (arr[i] == '1'){ binaryarray[i] = true; } else if (arr[i] == '0'){ binaryarray[i] = false; } } System.out.println(maxAmpStr); System.out.println(binaryarray[0]); System.out.println(binaryarray[1]); System.out.println(binaryarray[2]); System.out.println(binaryarray[3]); System.out.println(binaryarray[4]); System.out.println(binaryarray[5]); System.out.println(binaryarray[6]); } 

任何帮助表示赞赏。

实际上没有必要为此处理字符串,只需对您感兴趣的7位进行逐位比较。

 public static void main(String[] args) { int input = 15; boolean[] bits = new boolean[7]; for (int i = 6; i >= 0; i--) { bits[i] = (input & (1 << i)) != 0; } System.out.println(input + " = " + Arrays.toString(bits)); } 

我会用这个:

 private static boolean[] toBinary(int number, int base) { final boolean[] ret = new boolean[base]; for (int i = 0; i < base; i++) { ret[base - 1 - i] = (1 << i & number) != 0; } return ret; } 

基数为7的数字15将产生{false,false,false,true,true,true,true} = 0001111b

数字8,基数7 {假,假,假,真,假,假,假} = 0001000b

你做System.out.println(maxAmpStr); 在8的情况下是“1000”。所以,你只得到相关的部分,你想要的第一个“0000”被省略。

它不漂亮,但你能做的是:

 for (int i=0; i 

提示 :想想当你得到一个少于七个字符的字符表示时会发生什么。

特别要考虑char[]boolean[]数组如何“排列”; 一个比另一个要多,所以指数应该如何重合?


实际答案 :目前您正在使用字符数组的第一个元素作为布尔数组的第一个元素,这只在您使用七个字符的字符串时才是正确的。 实际上,您希望数组的最后一个元素重合(以便在前面填充零而不是在末尾填充)。

解决这个问题的一种方法是使用循环中的索引(例如,计算出大小差异并修改binaryarray[i + offset] )。 但是更简单的解决方案就是在第一行之后用零填充字符串,以确保它在转换为char数组之前正好是七个字符。

(额外标记:当数组中有超过7个字符时你会怎么做,例如,如果有人以200作为参数传递?基于上述两种解决方案,你应该能够轻松地检测到这种情况并专门处理它。)

由于这里没有人有动态数组长度的答案,这是我的解决方案:

 public static boolean[] convertToBinary(int number) { int binExpo = 0; int bin = 1; while(bin < number) { //calculates the needed digits bin = bin*2; binExpo++; } bin = bin/2; boolean[] binary = new boolean[binExpo]; //array with the right length binExpo--; while(binExpo>=0) { if(bin<=number) { binary[binExpo] = true; number =number -bin; bin = bin/2; }else { binary[binExpo] = false; } binExpo--; } return binary; } 

char数组只是需要的时间,所以你的布尔数组可能会更长,并将位置放在错误的位置。 所以从后面开始,当你的char数组完成时,用0的填充你的布尔数组直到第一个位置。

Integer.toBinaryString(int i)不填充。 例如, Integer.toBinaryString(7)按预期打印111而不是00000111 。 在决定从哪里开始填充布尔数组时,需要考虑这一点。

15.ToBinaryString将是’1111′

你是从第一个字符到最后一个字符,所以第一个’1’是bit(3)进入binaryArray [0],我假设它应该是0位。

你需要用前导零填充ToBinaryString到7(8 ??)的长度,然后反转字符串,(或你的循环)

或者你可以停止搞乱字符串,只使用位运算符

BinaryArray [3] =(SomeInt && 2 ^ 3!= 0);

^ =幂运算符或者如果不是(1 << 3)或者Java中的左移。

  public static boolean[] convertToBinary(int b){ boolean[] binArray = new boolean[7]; boolean bin; for(int i = 6; i >= 0; i--) { if (b%2 == 1) bin = true; else bin = false; binArray[i] = bin; b/=2; } return binArray; } 
  public static String intToBinary(int num) { int copy = num; String sb = ""; for(int i=30; i>=0; i--) { sb = (copy&1) + sb; copy = copy >>>=1; } return sb; } 
  1. 和数字1
  2. 将该值附加到字符串
  3. 对于i = 30..0,执行无符号右移重复步骤1-3
 String maxAmpStr = Integer.toBinaryString(255); char[] arr = maxAmpStr.toCharArray(); boolean[] binaryarray = new boolean[20]; int pivot = binaryarray.length - arr.length; int j = binaryarray.length - 1; for (int i = arr.length - 1; i >= 0; i--) { if (arr[i] == '1') { binaryarray[j] = true; } else if (arr[i] == '0') { binaryarray[j] = false; } if (j >= pivot) j--; } System.out.println(maxAmpStr); for (int k = 0; k < binaryarray.length; k++) System.out.println(binaryarray[k]); }