【一本通】进制转换

发布于:2024-12-18 ⋅ 阅读:(70) ⋅ 点赞:(0)

【一本通】进制转换


💐The Begin💐点点关注,收藏不迷路💐

编程输入十进制整数N(N:-32767~32767),请输出它对应的二进制、八进制、十六进制数。

输入

十进制整数N(N:-32767~32767)

输出

输出转成的2进制数、8进制数、16进制数,用空格分隔

样例输入 1

12

样例输出 1

1100 14 C

样例输入 2

-15

样例输出 2

-1111 -17 -F

#include <stdio.h>

int main() {
    int n;
    scanf(“%d”, &n);

    if (n == 0) { // 特殊处理输入为0的情况
        printf(“0 0 0\n”);
        return 0;
    }

    if (n >= 0) {
        int binary[16] = {0}; // 假设最多16位二进制数,用于存储每一位的值,初始化为0
        int index = 0;
        int temp = n;
        while (temp > 0) {
            binary[index++] = temp % 2; // 取余得到当前最低位的值并存入数组
            temp /= 2;
        }
        for (int i = index - 1; i >= 0; i–) { // 从高位到低位输出二进制数
            printf(“%d”, binary[i]);
        }
        printf(" ");

        printf("%o ", n);

        printf(“%X\n”, n);
    } else {
        // 对于负数,先求其补码形式的二进制表示(通过取反加1的方式)
        n = -n;
        int binary[16] = {0};
        int index = 0;
        int temp = n;
        while (temp > 0) {
            binary[index++] = temp % 2;
            temp /= 2;
        }
        // 对得到的二进制位取反
        for (int i = 0; i < index; i++) {
            binary[i] = 1 - binary[i];
        }
        // 加1操作,模拟补码的形成(处理进位情况)
        int carry = 1;
        for (int i = 0; i < index; i++) {
            int sum = binary[i] + carry;
            binary[i] = sum % 2;
            carry = sum / 2;
        }
        if (carry) { // 如果还有进位,扩展位数
            binary[index++] = 1;
        }
        printf(“-”);
        for (int i = index - 1; i >= 0; i–) { // 输出补码形式的二进制数
            printf(“%d”, binary[i]);
        }
        printf(" ");

        // 对于八进制和十六进制,直接按照补码对应的整数值进行转换输出
        printf(“-%o “, -n);
        printf(”-%X\n”, -n);
    }
    return 0;
}

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

网站公告

今日签到

点亮在社区的每一天
去签到