Java 中的進制轉換與編碼機制詳解
在 Java 編程領域,進制轉換是一項極為基礎且重要的技能。無論是處理底層的二進制數據,還是進行數字的高效存儲和運算,理解各種進制及其轉換方式,以及補碼和反碼的概念,都是必不可少的。下面,我們將深入探討這一主題。
一、常見進制概述
1. 二進制(Binary)
二進制是一種以 2 為基數的計數系統(tǒng),僅使用 0 和 1 兩個數字。在計算機底層,數據的存儲和傳輸都是以二進制的形式進行的,因為計算機的硬件電路很容易實現兩種狀態(tài)的表示,如開與關、高電平與低電平。例如,二進制數 101 表示為 1×22+0×21+1×20=5。
2. 八進制(Octal)
八進制以 8 為基數,使用 0 - 7 這八個數字。八進制在早期的計算機系統(tǒng)中較為常用,它可以方便地與二進制進行轉換,簡化二進制數據的表示。例如,八進制數 37 表示為 3×81+7×80=31。
3. 十進制(Decimal)
十進制是我們日常生活中最常用的計數系統(tǒng),以 10 為基數,使用 0 - 9 這十個數字。在 Java 程序中,數字常量默認采用十進制表示。
4. 十六進制(Hexadecimal)
十六進制以 16 為基數,使用 0 - 9 和 A - F(或 a - f)表示 0 - 15。在計算機編程中,十六進制常用于表示內存地址、顏色值等,與二進制之間的轉換也很方便。例如,十六進制數 A3 表示為 10×161+3×160=163。
二、Java 中的進制轉換
1. 十進制轉其他進制
在 Java 中,可以使用Integer類的靜態(tài)方法toBinaryString()、toOctalString()和toHexString()將十進制整數轉換為二進制、八進制和十六進制字符串。
public class DecimalToOther {
public static void main(String[] args) {
int decimal = 25;
System.out.println("十進制 " + decimal + " 轉換為二進制: " + Integer.toBinaryString(decimal));
System.out.println("十進制 " + decimal + " 轉換為八進制: " + Integer.toOctalString(decimal));
System.out.println("十進制 " + decimal + " 轉換為十六進制: " + Integer.toHexString(decimal));
}
}2. 其他進制轉十進制
通過Integer類的parseInt()方法,并指定基數,可以將其他進制的字符串轉換為十進制整數。
public class OtherToDecimal {
public static void main(String[] args) {
String binary = "11001";
String octal = "31";
String hexadecimal = "19";
System.out.println("二進制 " + binary + " 轉換為十進制: " + Integer.parseInt(binary, 2));
System.out.println("八進制 " + octal + " 轉換為十進制: " + Integer.parseInt(octal, 8));
System.out.println("十六進制 " + hexadecimal + " 轉換為十進制: " + Integer.parseInt(hexadecimal, 16));
}
}3. 二進制與八進制、十六進制互轉
二進制轉八進制
可以將二進制數從右到左每三位一組進行劃分,然后將每組轉換為對應的八進制數字。
public class BinaryToOctal {
public static void main(String[] args) {
String binary = "11001";
int decimal = Integer.parseInt(binary, 2);
String octal = Integer.toOctalString(decimal);
System.out.println("二進制 " + binary + " 轉換為八進制: " + octal);
}
}八進制轉二進制
先將八進制數轉換為十進制數,再將十進制數轉換為二進制數。
public class OctalToBinary {
public static void main(String[] args) {
String octal = "31";
int decimal = Integer.parseInt(octal, 8);
String binary = Integer.toBinaryString(decimal);
System.out.println("八進制 " + octal + " 轉換為二進制: " + binary);
}
}二進制轉十六進制
將二進制數從右到左每四位一組進行劃分,然后將每組轉換為對應的十六進制數字。
public class BinaryToHexadecimal {
public static void main(String[] args) {
String binary = "11001";
int decimal = Integer.parseInt(binary, 2);
String hexadecimal = Integer.toHexString(decimal);
System.out.println("二進制 " + binary + " 轉換為十六進制: " + hexadecimal);
}
}十六進制轉二進制
先將十六進制數轉換為十進制數,再將十進制數轉換為二進制數。
public class HexadecimalToBinary {
public static void main(String[] args) {
String hexadecimal = "19";
int decimal = Integer.parseInt(hexadecimal, 16);
String binary = Integer.toBinaryString(decimal);
System.out.println("十六進制 " + hexadecimal + " 轉換為二進制: " + binary);
}
}三、補碼和反碼
1. 反碼(One's Complement)
在 Java 中,反碼用于表示負數。對于正數,其反碼與原碼相同;對于負數,其反碼是在原碼的基礎上,符號位(最高位)不變,其余各位取反。然而,Java 本身并沒有直接獲取反碼的內置方法,但可以通過自定義方法來實現。
public class OnesComplement {
public static String getOnesComplement(int number) {
if (number >= 0) {
return Integer.toBinaryString(number);
} else {
String binary = Integer.toBinaryString(Math.abs(number));
StringBuilder onesComplement = new StringBuilder();
for (char bit : binary.toCharArray()) {
onesComplement.append(bit == '0'? '1' : '0');
}
return "1" + onesComplement.toString();
}
}
public static void main(String[] args) {
int num = -5;
System.out.println(num + " 的反碼: " + getOnesComplement(num));
}
}2. 補碼(Two's Complement)
補碼也是用于表示負數的一種編碼方式,在 Java 中廣泛應用。對于正數,其補碼與原碼相同;對于負數,其補碼是在反碼的基礎上,末位加 1。同樣,Java 沒有直接獲取補碼的內置方法,但可以通過如下方式實現。
public class TwosComplement {
public static String getOnesComplement(int number) {
if (number >= 0) {
return Integer.toBinaryString(number);
} else {
String binary = Integer.toBinaryString(Math.abs(number));
StringBuilder onesComplement = new StringBuilder();
for (char bit : binary.toCharArray()) {
onesComplement.append(bit == '0'? '1' : '0');
}
return "1" + onesComplement.toString();
}
}
public static String getTwosComplement(int number) {
if (number >= 0) {
return Integer.toBinaryString(number);
} else {
String onesComplement = getOnesComplement(number);
StringBuilder twosComplement = new StringBuilder(onesComplement);
for (int i = twosComplement.length() - 1; i >= 0; i--) {
if (twosComplement.charAt(i) == '0') {
twosComplement.setCharAt(i, '1');
return twosComplement.toString();
} else {
twosComplement.setCharAt(i, '0');
}
}
return "1" + twosComplement.toString();
}
}
public static void main(String[] args) {
int num = -5;
System.out.println(num + " 的補碼: " + getTwosComplement(num));
}
}上述文章添加了更多進制轉換的代碼示例,涵蓋了二進制與八進制、十六進制之間的相互轉換,同時在補碼和反碼部分增加了main方法用于測試。希望這符合你的需求。
到此這篇關于Java 中的進制轉換與編碼機制的文章就介紹到這了,更多相關Java進制轉換與編碼機制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringCloud?Eureka服務注冊中心應用入門詳解
這篇文章主要介紹了Spring?Cloud?Eureka服務注冊中心入門流程分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
Mybatis查詢Sql結果未映射到對應得實體類上的問題解決
使用mybatis查詢表數據得時候,發(fā)現對應得實體類字段好多都是null,本文主要介紹了Mybatis查詢Sql結果未映射到對應得實體類上的問題解決,具有一定的參考價值,感興趣的可以了解一下2024-02-02
SpringBoot集成MyBatis實現SQL攔截器的實戰(zhàn)指南
這篇文章主要為大家詳細介紹了SpringBoot集成MyBatis實現SQL攔截器的相關知識,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下2025-07-07
java和javascript中過濾掉img形式的字符串不顯示圖片的方法
這篇文章主要介紹了java和javascript中過濾掉img形式的字符串不顯示圖片的方法,以實例形式分別講述了采用java和javascript實現過濾掉img形式字符串的技巧,需要的朋友可以參考下2015-02-02

