c13*_*554 1 java xor bitcount hamming-distance long-integer
我试图对Java中的两个64位Long变量执行XOR操作。问题是,当我在变量中添加超过16位时,它将失败。
例如,这有效并返回7:
Long h1 = Long.parseLong("1100001101001101");
Long h2 = Long.parseLong("1100001101000001");
System.out.println(Long.bitCount(h1 ^ h2));
Run Code Online (Sandbox Code Playgroud)
如果我将h1和h2的值增加到:
Long h1 = Long.parseLong("11000110000110100110101101001101");
Long h2 = Long.parseLong("11000011100001101001101101000001");
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
例外在线程“主” java.lang.NumberFormatException:对于输入字符串: “11000110000110100110101101001101”
在
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
在java.lang.Long.parseLong(Long.java:592)
在java.lang.Long.parseLong(Long.java:631)
如果我加倍(64位要计算的),则相同:
Long h1 = Long.parseLong("1100011100011000011010011010110100110110000110100110101101001101");
Long h2 = Long.parseLong("1100001110001100001101001101011010011011100001101001101101000001");
Run Code Online (Sandbox Code Playgroud)
关于为什么为什么失败超过16位有帮助吗?
Long.parseLong("11000110000110100110101101001101")尝试解析String为十进制数字,并且此数字太大而无法容纳在long变量中。
要将解析String为二进制数,您需要指定基数:
Long.parseLong("11000110000110100110101101001101",2);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,Long.parseLong返回一个long,所以我要么将其分配给一个long:
long h1 = Long.parseLong("11000110000110100110101101001101",2);
Run Code Online (Sandbox Code Playgroud)
或使用Long.valueOf:
Long h1 = Long.valueOf("11000110000110100110101101001101",2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |