计算机基础(二):轻松理解二进制、八进制、十进制和十六进制

计算机基础(二):轻松理解二进制、八进制、十进制和十六进制

计算机基础系列文章

计算机基础(一):ASCll、GB2312、GBK、Unicode、UTF-32、UTF-16、UTF-8深度解析

计算机基础(二):轻松理解二进制、八进制、十进制和十六进制

一、进制基础概念1、二进制(Binary)基数为2,由 0 和 1 组成,是计算机底层数据存储的基本形式以 0b 或 0B 开头示例:二进制0b1010 表示十进制的 102、八进制(Octal)基数为8,由 0-7 组成,作用是简化二进制表示以 0 开头示例:八进制 012 表示十进制的 103、十进制(Decimal)基数为10,由 0-9 组成,是我们日常生活中使用的进制4、十六进制(Hexadecimal)基数为16,由 0-9 和 A-F(或 a-f)组成,其中 A 到 F 表示 10 到 15,常用于简化二进制表示以 0x 或 0X 开头示例:十六进制 0xA 表示十进制的 10数制的基本要素:

二、进制转换原理1、十进制 → R进制(短除法)规则:不断除以目标进制基数,倒序取余数

示例1:十进制 10 转二进制:

代码语言:javascript复制10 ÷ 2 = 5 ··· 余 0

5 ÷ 2 = 2 ··· 余 1

2 ÷ 2 = 1 ··· 余 0

1 ÷ 2 = 0 ··· 余 1

结果:0b1010(逆序拼接余数)示例2:十进制 50 转十六进制:

代码语言:javascript复制50 ÷ 16 = 3 ··· 余 2

3 ÷ 16 = 0 ··· 余 3

结果:0x32(从下往上读)2、R进制 → 十进制(位权展开)规则:每位数字乘以基数的幂次(从右向左,幂次从0开始)

示例1:二进制 0b1010 转十进制:

代码语言:javascript复制1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 8 + 0 + 2 + 0 = 10示例2:十六进制 0x2AF 转十进制:

代码语言:javascript复制2×16² + 10×16¹ + 15×16⁰ = 512 + 160 + 15 = 6873、二进制 ↔ 八进制/十六进制(分组转换)二进制 → 八进制:每3位一组(不足补0),转换为1位八进制数 示例:0b101010 → 101(5) + 010(2) → 52二进制 → 十六进制:每4位一组(不足补0),转换为1位十六进制数 示例:0b101010 → 0010(前面补了两个0)(2) + 1010(A) → 2A反向转换:八/十六进制每位拆分为3/4位二进制三、Java内置进制转换方法1、十进制 → R进制代码语言:javascript复制// 十进制转二进制

Integer.toBinaryString(13);

// 或者

Integer.toString(13,2); // "1101"

// 十进制转八进制

Integer.toOctalString(29);

// 或者

Integer.toString(13,8); // "35"

// 十进制转十六进制

Integer.toHexString(29);

// 或者

Integer.toString(13,16); // "1d"2、R进制 → 十进制通用方法:Integer.parseInt(String str, int radix)代码语言:javascript复制// 二进制 → 十进制

Integer.parseInt("1101", 2); // 13

// 八进制 → 十进制

Integer.parseInt("35", 8); // 29

// 十六进制 → 十进制

Integer.parseInt("1D", 16); // 293、进制间间接转换(通过十进制中转)代码语言:javascript复制// 二进制转十六进制

String bin = "1101";

int anInt = Integer.parseInt(bin, 2); // 二进制 → 十进制

String hex = Integer.toString(anInt, 16); // 十进制 → 十六进制 -> "d"

// 十六进制转八进制

String hex1 = "A";

int decimal = Integer.parseInt(hex, 16); // 十六进制 → 十进制

String octal = Integer.toOctalString(decimal); // 十进制 → 八进制 → "12"4、格式化输出 在 Java 中,使用System.out.printf来格式化十进制数为二进制、八进制或十六进制,可以通过指定不同的格式化参数来实现。

代码语言:javascript复制public class Main {

public static void main(String[] args) {

int num = 255; // 示例十进制数

// 输出十进制数

System.out.printf("十进制: %d\n", num); // 十进制: 255

// 输出二进制数

System.out.printf("二进制: %s\n", Integer.toBinaryString(num)); // 二进制: 11111111

// 输出八进制数

System.out.printf("八进制: %o\n", num); // 八进制: 377

// 输出十六进制数(小写)

System.out.printf("十六进制 (小写): %x\n", num); // 十六进制 (小写): ff

// 输出十六进制数(大写)

System.out.printf("十六进制 (大写): %X\n", num); // 十六进制 (大写): FF

}

}5、进制转换中的常见陷阱数值溢出:转换结果超出int范围(最大2147483647)代码语言:javascript复制// 错误示例

Integer.parseInt("2147483648"); // NumberFormatException

// 正确做法

Long.parseLong("2147483648");无效字符:进制与字符不匹配代码语言:javascript复制Integer.parseInt("12G3", 16); // G超出十六进制范围八进制前缀混淆:以0开头的十进制数代码语言:javascript复制int num = 035; // 八进制29,非十进制35四、自定义进制转换算法当处理超大数(超出 Integer 范围)或需灵活控制时,可手动实现1、十进制 → R进制(短除法实现)代码语言:javascript复制public static String decimalToR(int num, int radix) {

if (num == 0) return "0";

StringBuilder sb = new StringBuilder();

while (num > 0) {

int remainder = num % radix;

// 处理十六进制字母

char c = (remainder < 10) ? (char)('0' + remainder) : (char)('A' + remainder - 10);

sb.append(c);

num /= radix;

}

return sb.reverse().toString(); // 倒序输出余数

}

// 示例:decimalToR(10, 16) → "A"2、R进制 → 十进制(位权展开实现)代码语言:javascript复制public static int rToDecimal(String str, int radix) {

int result = 0;

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

int digit = Character.digit(c, radix); // 将字符转为对应数字

result = result * radix + digit;

}

return result;

}

// 示例:rToDecimal("1010", 2) → 10 五、进制转换实战应用1、计算机内部存储与处理 计算机内部处理的数据通常采用二进制表示。但为了便于人类理解,数据常常以其他进制表示(如十六进制或十进制)。

示例:

内存地址:计算机使用二进制表示地址,但人类更容易使用十六进制表示2、网络通信与协议 在网络通信中,IP地址和端口号常常使用十进制或十六进制表示。通过进制转换,可以有效地表示和处理网络数据。。

示例:

IPv4 地址:通常以点分十进制格式(如 192.168.1.1)表示,但计算机内部使用二进制格式处理MAC 地址:通常采用十六进制格式,表示网络硬件设备的唯一标识符3、 颜色表示 在图形和图像处理中,像素的颜色值通常用十六进制表示。每种颜色通过红、绿、蓝三个分量表示,每个分量的值通常为 0 到 255(即 8 位二进制数)。

示例:

RGB颜色表示:#FF5733(十六进制)对应的 RGB 颜色为 255, 87, 51(十进制)4、加密算法与哈希算法 在加密领域,进制转换在密钥生成、加密、解密以及哈希值的表示中也有应用。哈希算法的结果常常以十六进制表示,以便人类读取。

示例:

SHA-256 哈希值:将任意输入(如文件或字符串)转换为256位的哈希值,通常以十六进制字符串表示,例如:7b8b965ad4bca0e41ab51de7b31363a1

🎀 相关推荐

冬奥会点火仪式:莎娃任火炬手抢镜
🎯 棋牌365大厅

冬奥会点火仪式:莎娃任火炬手抢镜

📅 07-16 👀 7045
世界杯-瑞士2-2哥斯达黎加,小组第2进军16强
🎯 棋牌365大厅

世界杯-瑞士2-2哥斯达黎加,小组第2进军16强

📅 10-19 👀 466
快连VPN评测2024:中国用户首选免费VPN?优缺点全面分析
🎯 best365体育正不正规

快连VPN评测2024:中国用户首选免费VPN?优缺点全面分析

📅 07-15 👀 6331