据Processing's source,该unbinary()
功能引擎盖下称Integer.parseInt()
。根据the Java API,Integer.parseInt()
函数需要一个有符号的值。这是一个问题,因为32位int没有符号,他们有符号位。
换句话说,该unbinary()
功能不被治疗你输入32位的值相同的方式的Java(和因此处理)将治疗32位int。
int
可容纳的最大数字为2,147,483,647
。您输入的二进制值转换为2,147,483,648
,这超过了限制。
但值是一个32位数的二进制数!这不是一个32位整数?
unbinary()
函数将二进制值视为“人类可读的”,这意味着它期望负号的符号。所以它接受像-101
这样的东西来表示-5
二进制。但在引擎盖下,这不是如何处理二元负值。 Java使用two's complement来表示负数,这意味着-5
由二进制表示为11111111111111111111111111111011
。
它变得有点复杂,但基本上是:如果一个二进制数与1
开始,这意味着它是一个负数。
所以,10000000000000000000000000000000
您输入的数值计算仅在机器可读的格式可能的最低值int
的-2,147,483,648
但。unbinary()
函数将它视为“可读性”格式,这就是为什么你会得到这种差异。
我该如何解决这个问题?
这真的取决于你为什么需要从二进制到整数。但你可以使用Integer.parseUnsignedInt()
函数,它采用“机器可读”格式的二进制值:
int output = Integer.parseUnsignedInt("10000000000000000000000000000000", 2);
方式比我更快,也很详细:好的! (+1) –
谢谢@George!起初,这个让我挠了挠头。我始终难以在脑中保留二进制文件! –