DEV Community

codemee
codemee

Posted on

在 Java 中以 2 進位字串印出整數

Java 雖然提供有類似 C 的 printf(), 不過可選用的格式卻沒有 2 進位整數, 如果需要將整數以 2 進位字串印出, 可以使用 Integer 類別提供的兩個類別方法。

Integer.toString()

Integer.toString() 在輸出整數時可以指定進位制, 例如以下以 2 進位印出整數 100:

jshell> Integer.toString(100, 2)
$10 ==> "1100100"
Enter fullscreen mode Exit fullscreen mode

第 2 個參數就是進位制, 你甚至可以任意指定, 像是以下就是用 3 進位印出整數 100:

jshell> Integer.toString(100, 3)
$11 ==> "10201"
Enter fullscreen mode Exit fullscreen mode

不過這個方法在輸出負數的時候, 是以正負號加上數值絕對值的 2 進位字串來表示, 例如以 2 進位印出 -10 的結果就會是:

jshell> Integer.toString(-10, 2)
$9 ==> "-1010"
Enter fullscreen mode Exit fullscreen mode

如果你要在程式中以 2 進位方式表達負整數的字面值 (literal), 就可以用類似的方法, 例如:

jshell> a = -0b1010
a ==> -10
Enter fullscreen mode Exit fullscreen mode

如果你希望看到 -10 在記憶體中真正的表示方式, 就不能使用此方法。

Integer.toBinaryString()

Integer 類別提供有專門輸出 2 進位字串的 toBinaryString() 類別方法, 它會輸出記憶體中整數的實際 2 進位表示結果, 例如:

jshell> Integer.toBinaryString(100)
$7 ==> "1100100"

jshell> Integer.toBinaryString(-10)
$8 ==> "11111111111111111111111111110110"
Enter fullscreen mode Exit fullscreen mode

你會看到輸出負數時, 是以 2 的補數呈現, 而且為了避免誤解, 它會呈現完整的 32 個位元, 以便讓你看到左邊的位元都是 1。在輸出正數的時候, 即使不顯示左側的 0 位元也不會造成誤解, 所以只會呈現有效的位元數, 左側未出現的位元都是 0。

Integer 類別也提供 toHexString() 以及 toOctalString() 讓你可以將整數輸出成 16 進位字串或 8 進位字串, 有需要時都可以好好利用。

小結

能夠正確呈現 2 進位結果對於我們理解整數的儲存方式與正負數轉換很有幫助, 有些時候我們也的確需要呈現 2 進位結果時, 本文介紹的方法就可以派上用場了。

Top comments (0)