处理unbinary函数的问题

时间:2016-11-22 23:27:16

标签: bit-manipulation processing

我正在使用处理2.2.1 。当我尝试在32位整数上使用unbinary()时,除了第一个位之外,每个位都可以被翻转。

例如,

int output = unbinary("10000000000000000000000000000000");

这将抛出:

"NumberFormatException: For input string: "10000000000000000000000000000000"

unbinary()不能处理32位整数吗?

1 个答案:

答案 0 :(得分:2)

根据Processing's sourceunbinary()函数会调用Integer.parseInt()。根据{{​​3}},Integer.parseInt()函数需要有符号值。这导致了一个问题,因为32位的输入没有符号,他们有一个符号位

换句话说,unbinary()函数不会像处理Java(因此处理器)处理32位int一样处理输入的32位值。

int可容纳的最大数量为2,147,483,647。您的输入二进制值转换为2,147,483,648,超出限制。

但该值是32位数的二进制数!那不是一个32位整数吗?

unbinary()函数将二进制值视为"人类可读",这意味着它需要一个负数的符号。因此它接受-101之类的内容来表示二进制中的-5。但在幕后,并不是如何处理负二进制值。 Java使用the Java API来表示负数,这意味着-5由二进制的11111111111111111111111111111011表示。

它有点复杂,但基本上是:如果二进制数以1开头,则表示它是负数。

因此,10000000000000000000000000000000的输入值仅以机器可读格式评估int的最低-2,147,483,648值,但 {{1}函数将它视为"人类可读"格式,这就是你得到差异的原因。

如何解决此问题?

这实际上取决于你需要从二进制到整数的原因。但是你可能会使用unbinary()函数,它会在机器可读的"机器可读中使用二进制值。格式:

Integer.parseUnsignedInt()