我需要获取矩阵内一系列数字的二进制表示,以便用另一个向量执行某些操作。
所以我想说我会得到 2 ^ 4 数字的二进制表示,就是0到15.我知道我需要 16x4 矩阵。
我有这段代码:
int [][] a = new int[15][4];
for (int i = 0; i < a.length; i++) {
a[i] = String.format("%5s", Integer.toBinaryString(i)).replace(' ', '0').toCharArray();
}
因此,作为二进制格式化数字char[]
的数组表示,我不能将其与a[i]
对齐。
如果有任何方法在没有循环char数组的情况下执行强制转换?
答案 0 :(得分:2)
不是我知道的。有一些不同的方法可以做到这一点,循环遍历二进制字符串的整数表示,以及每一步取num%10
和num/10
,如果你绝对不希望循环通过char数组。但是在这种情况下,通过char数组循环似乎很简单。无论如何这里是解决方案,就像你不想要的那样我猜...
int [][] a = new int[16][4];
for (int i = 0; i < a.length; i++) {
char[] cArr = String.format("%4s", Integer.toBinaryString(i)).replace(' ', '0').toCharArray();
for(int j = 0; j < a[0].length; j++)
a[i][j] = Integer.parseInt(cArr[j]+"");
}
答案 1 :(得分:1)
这是您想要完成的更简单的解决方案......
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
a[i][a[0].length - 1 - j] = (i & (1 << j)) != 0 ? 1 : 0;
}
}
不是将整数i转换为String然后用零替换空格然后将其转换为数组,而是:
带上我。
取二进制数A,第j个位置只有1个(其他为零):A =(1 <&lt; j)
对您的号码和号码A进行连接(二进制逐位乘法)。这可以通过以下方式完成:(i&amp; A)
如果该位置有非零位,在连接后你会得到A.如果有一个零位,你将得到0.
如果结果不为零,则i在第j个位置具有非零位。否则它就没有了。
使用逐位操作的解决方案也会更快。
答案 2 :(得分:0)
我相信仍然需要一个外部循环来遍历char[][]
行。
int[] charArray2intArray(char[][] binary) {
int[] numbers = new int[binary.length];
int row = 0;
for (char[] number: binary) {
String bin = new String(number);
numbers[row++] = Integer.parseInt(bin, 2);
}
return numbers;
}