返回首页   进站必读

3.8 数制转换


3.8 数制转换

将100分别转换为2进制,8进制和16进制。

    100 = 0110 0100b
    100 = 0144
    100 = 0x64

编写程序从键盘输入一个十进制数,分别输出其2进制,8进制及16进制。

    #include <stdio.h>
    #include <string.h>

    void revert(char *buf)
    {
            int i = 0, j = strlen(buf) - 1;
            int tmp;
            for(; i <= j; i++)
            {
                    tmp = buf[j];
                    buf[j] = buf[i];
                    buf[i] = tmp;
            }
    }

    void binary_convert(int x, char *buf)
    {
            int i = 0;
            while(x)
            {
                    buf[i++] = x % 2 + '0';
                    x /= 2;
            }
            buf[i] = '\0';
            revert(buf);
    }

    void oct_convert(int x, char *buf)
    {
            int i = 0;
            while(x)
            {
                    buf[i++] = x % 8 + '0';
                    x /= 8;
            }
            buf[i] = '\0';
            revert(buf);
    }

    void hex_convert(int x, char *buf)
    {
            int i = 0;
            char *s = "0123456789abcdef";
            while(x)
            {
                    buf[i++] = s[x % 16];
                    x /= 16;
            }
            buf[i] = '\0';
            revert(buf);
    }
    int main(int argc, const char *argv[])
    {
            char buf[20];
            int num;
            scanf("%d", &num);

            binary_convert(num, buf);
            printf("binary = %sb\n", buf);

            oct_convert(num, buf);
            printf("oct = 0%s\n", buf);

            hex_convert(num, buf);
            printf("hex = 0x%s\n", buf);
            return 0;
    }