據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!起初,這個讓我撓了撓頭。我始終難以在腦中保留二進制文件! –