我有一个保存1:s或0:s的矩阵,创建了二进制数。其宽度为n。对于n = 2和n = 3,它看起来像:
00 000 01 001 10 010 11 011 100 101 110 111
等等。现在,我正在使用以下代码来生成此代码。
int row = (int) Math.pow(2, n); int col = n; int[][] matrix = new int[row][col]; for (int r = 0; r < row; r++) { String binaryNumber = String.format("%" + n + "s", Integer.toBinaryString(r)).replace(' ', '0'); for (int c = col - 1; c >= 0; c--) { matrix[r][c] = Integer.parseInt("" + binaryNumber.charAt(0)); binaryNumber = binaryNumber.substring(1); } }
现在,我需要帮助创建相同的东西,但使用灰色编码。在Java中有方便的方法吗?另外,如果有一种更聪明的方式来做我在做的事情,我将很乐于学习。
因为我已经习惯了toBinaryString()帮助我,所以我真的不知道从哪里开始。编辑:灰色代码将如下所示:
toBinaryString()
00 000 01 001 11 011 10 010 110 111 101 100
您只需更改即可获得格雷码
Integer.toBinaryString(r)
进入
Integer.toBinaryString((r >> 1) ^ r)。
Integer.toBinaryString((r >> 1) ^ r)
试试:)