Skip to content

L3_02 进制转换

一、二进制

1.1 定义

二进制是使用 0 和 1 表示数字的计数系统。

1.2 特点

  • 基数为 2
  • 每一位的权值为 2^n

1.3 示例

二进制:1010
十进制:1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 8 + 0 + 2 + 0 = 10

二、八进制

2.1 定义

八进制是使用 0-7 表示数字的计数系统。

2.2 特点

  • 基数为 8
  • 每一位的权值为 8^n
  • 三位二进制对应一位八进制

2.3 示例

八进制:12
十进制:1×8¹ + 2×8⁰ = 8 + 2 = 10

三、十进制

3.1 定义

十进制是使用 0-9 表示数字的计数系统。

3.2 特点

  • 基数为 10
  • 每一位的权值为 10^n

3.3 示例

十进制:123
值:1×10² + 2×10¹ + 3×10⁰ = 100 + 20 + 3 = 123

四、十六进制

4.1 定义

十六进制是使用 0-9 和 A-F 表示数字的计数系统。

4.2 特点

  • 基数为 16
  • 每一位的权值为 16^n
  • 四位二进制对应一位十六进制

4.3 示例

十六进制:A
十进制:10

十六进制:FF
十进制:15×16¹ + 15×16⁰ = 240 + 15 = 255

五、进制转换方法

5.1 十进制转其他进制

5.1.1 十进制转二进制

cpp
#include <iostream>
using namespace std;

void decimalToBinary(int num) {
    int binary[32];
    int i = 0;
    
    while (num > 0) {
        binary[i] = num % 2;
        num /= 2;
        i++;
    }
    
    for (int j = i-1; j >= 0; j--) {
        cout << binary[j];
    }
}

int main() {
    decimalToBinary(10);  // 输出:1010
    return 0;
}

5.1.2 十进制转十六进制

cpp
#include <iostream>
using namespace std;

void decimalToHex(int num) {
    char hex[16] = {'0','1','2','3','4','5','6','7',
                    '8','9','A','B','C','D','E','F'};
    int remainder;
    
    if (num == 0) {
        cout << "0";
        return;
    }
    
    while (num > 0) {
        remainder = num % 16;
        cout << hex[remainder];
        num /= 16;
    }
}

int main() {
    decimalToHex(255);  // 输出:FF
    return 0;
}

5.2 其他进制转十进制

5.2.1 二进制转十进制

cpp
#include <iostream>
#include <string>
using namespace std;

int binaryToDecimal(string binary) {
    int decimal = 0;
    for (char c : binary) {
        decimal = decimal * 2 + (c - '0');
    }
    return decimal;
}

int main() {
    cout << binaryToDecimal("1010") << endl;  // 输出:10
    return 0;
}

5.2.2 十六进制转十进制

cpp
#include <iostream>
#include <string>
using namespace std;

int hexToDecimal(string hex) {
    int decimal = 0;
    for (char c : hex) {
        decimal *= 16;
        if (c >= '0' && c <= '9') {
            decimal += (c - '0');
        } else if (c >= 'A' && c <= 'F') {
            decimal += (c - 'A' + 10);
        } else if (c >= 'a' && c <= 'f') {
            decimal += (c - 'a' + 10);
        }
    }
    return decimal;
}

int main() {
    cout << hexToDecimal("FF") << endl;  // 输出:255
    return 0;
}

5.3 二进制与八进制、十六进制互转

5.3.1 二进制转八进制

二进制:101011
分组:010 101 1(前面补0)
八进制:2 5 3 = 253

5.3.2 二进制转十六进制

二进制:11010110
分组:1101 0110
十六进制:D 6 = D6

六、示例程序:进制转换器

cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
    int choice;
    cout << "1. 十进制转二进制" << endl;
    cout << "2. 十进制转十六进制" << endl;
    cout << "3. 二进制转十进制" << endl;
    cout << "4. 十六进制转十进制" << endl;
    cout << "请选择转换类型: ";
    cin >> choice;
    
    switch (choice) {
        case 1: {
            int num;
            cout << "输入十进制数: ";
            cin >> num;
            // 实现转换...
            break;
        }
        case 2: {
            int num;
            cout << "输入十进制数: ";
            cin >> num;
            // 实现转换...
            break;
        }
        case 3: {
            string binary;
            cout << "输入二进制数: ";
            cin >> binary;
            // 实现转换...
            break;
        }
        case 4: {
            string hex;
            cout << "输入十六进制数: ";
            cin >> hex;
            // 实现转换...
            break;
        }
        default:
            cout << "无效选择" << endl;
    }
    
    return 0;
}

百炼成钢,融会贯通