美文网首页十天学会C语言
第07天C语言(15):进制查表法

第07天C语言(15):进制查表法

作者: liyuhong | 来源:发表于2017-07-10 09:33 被阅读17次
    一、概念
    二、代码
    #include <stdio.h>
    void printfBinary(int value);
    void printfBinary2(int value);
    void printfOct(int value);
    void printfHex(int value);
    
    
    void printfHex2(int value);
    void printfOct2(int value);
    void printfBinary3(int value);
    int main()
    {
        /*
                                                    0000 0000 0000 0000 0000 0000 0000 1010
       & 0000 0000 0000 0000 0000 0000 0000 0000 0001
    
         */
        
        int num = 10; // 1010
    //    printfBinary(num);
    //    printfBinary2(num);
    //    printfOct(num); // 10的8进制等于12
    //    printfHex(num); // 10的16进制等于a
    //    printfHex2(num); // 10的16进制等于a
          printfOct2(num); // 10的8进制等于12
        printfBinary3(num);
    
        
        return 0;
    }
    void printfBinary3(int value)
    {
        char charValue[11] = {'0','1'};
        char result[32] = {'0'};
        int pos = 32;
        
        while (value != 0) {
            int res = value & 1;
            char c = charValue[res];
            result[--pos] = c;
            value = value >> 1;
            
        }
        // 4.打印结果
        for (int i = pos; i < 32; i++) {
            printf("%c",result[i]);
        }
        printf("\n");
    }
    void printfOct2(int value)
    {
        // 1.定义一个数组,用于保存八进制中所有的取值
        char charValue[11] = {'0','1','2','3','4','5','6','7'};
        // 2.定义一个数组,用与保持查询后的结果
        char result[11] = {'0'};
        // 3.定义一个变量,用于记录当前需要存储到查询结果数组的索引
        int pos = 11;
        
        while (value != 0) {
            int res = value & 7;
            // 2.利用取出来的值 到表中查询对应的结果
            char c = charValue[res];
            // 3.存储查询的结果 (从最后一位开始存储)
            result[--pos] = c;
            // 4.移除二进制被取出的三位
            value = value >> 3;
    //        printf("pos = %i\n",pos);
    
        }
        // 4.打印结果
        for (int i = pos; i < 11; i++) {
            printf("%c",result[i]);
        }
        printf("\n");
    }
    
    void printfHex2(int value)
    {
    //   0000 0000 0000 0000 0000 0000 0000 1010
        // 1.定义一个数组,用于保存十六进制中所有的取值
        // 规律, 取出的4个二进制位得到的值,正好是数组中 角标对应的值
        char charValue[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        //              '',''
        char result[8] = {'0'}; // 8个4位的16进制 1位代表4个字节
        int pos = 8; // 从第八个开始取
        
        while (value !=0) {
            // 取出4位的值
            int res = value & 15;
            // 利用这个值 作为索引去数组中 查询对应的十六进制的值
            char c = charValue[res];
    //        printf("%c",c);
            // 将取出来的值 放到用于存储结果的数组中
            result[--pos] = c;
            
            // 每取完一次 就干掉他最低的4位
            value = value >> 4;
            printf("pos = %i\n",pos);
        }
        
        for (int i = pos; i < 8; i++) {
            printf("%c",result[i]);
        }
        printf("\n");
    }
    
    
    void printfHex(int value)
    {
        for (int i = 0 ; i<=8; i++) {
            int res = value &15; // 1111
            // 对十六进制 进行特殊处理
            if (res > 9) {
                char c = res - 10 + 'a';
                printf("%c",c);
            }
            else
            {
                printf("%i",res);
            }
            
            value = value >> 4;
        }
    }
    
    
    void printfOct(int value)
    {
        //   00 000 000 000 000 000 000 000 000 001 010
        // 倒序取出八进制
        for (int i = 0; i < 11; i++) {
            int res = value & 7; // 111
            printf("%i",res);
            value = value >> 3;
        }
    }
    
    void printfBinary2(int value)
    {
        // 倒序取出二进制
        for (int i = 0; i <= 32; i++) {
            int res = value & 1;
            printf("%i",res);
            value = value >> 1;
        }
        printf("\n");
    }
    
    
    void printfBinary(int value)
    {
    //    int offset = sizeof(value) * 8 -1;
        // 8等于2的3次幂  左移是乘以多少次幂
        int offset = (sizeof(value) <<3) -1;
    //    int offset = 31;
        
        while (offset >= 0) {
            int res = (value >> offset) & 1;
            printf("%i",res);
            if (offset %4 == 0 ) {
                printf(" ");
            }
            offset--;
    
        }
        
        printf("\n");
    }
    

    相关文章

      网友评论

        本文标题:第07天C语言(15):进制查表法

        本文链接:https://www.haomeiwen.com/subject/yzkyhxtx.html