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

