不使用 Integer.toBinaryString 等內建方法,透過位運算手動實作長整數 (long) 的進制轉換,支援負數處理。
Math.abs(dec) 進行位運算。& 1, & 7, & 15) 拼接字串。>>=1, >>=3, >>=4)。"0"。public class DecToBin {
public static void main(String[] args) {
long dec = -9223372036854775807L;
String binStr = "";
long decAbs = Math.abs(dec);
while (decAbs > 0) {
binStr = (decAbs & 1) + binStr;
decAbs >>= 1;
}
binStr = dec < 0 ? "-" + binStr : (dec == 0 ? "0" : binStr);
System.out.println(binStr);
}
}
public class DecToOct {
public static void main(String[] args) {
long dec = -0; // 示範負零概念
String octStr = "";
long decAbs = Math.abs(dec);
while (decAbs > 0) {
octStr = (decAbs & 7) + octStr;
decAbs >>= 3;
}
octStr = dec < 0 ? "-" + octStr : (dec == 0 ? "0" : octStr);
System.out.println(octStr);
}
}
public class DecToHex {
public static void main(String[] args) {
long dec = -1;
String hexStr = "";
long decAbs = Math.abs(dec);
while (decAbs > 0) {
long lastFour = decAbs & 15;
hexStr = (lastFour > 9 ? (char)('A' + lastFour - 10) : lastFour) + hexStr;
decAbs >>= 4;
}
hexStr = dec < 0 ? "-" + hexStr : (dec == 0 ? "0" : hexStr);
System.out.println(hexStr);
}
}
實務上建議直接使用 Long.toString(dec, radix) (radix=2/8/16) 或 Integer.toHexString 等標準庫,效能更好且經過充分測試。本文僅供演算法原理學習參考。