zoukankan      html  css  js  c++  java
  • C语言基础--进制

    进制表示:

    //     1.默认就是10进制
        int num = 12;
    //    2.在前面加上一个0就代表八进制
        int num1 = 014;
    //    %d是以十进制的方式输出一个整数
        printf("%d
    ", num1);
    //    %o是以八进制的方式输出一个整数
        printf("%o
    ", num);
    //    在数值前面加上0b就代表二进制
        int num2 = 0b1100;
        printf("%d
    ", num2);
    //    在数值前面加上0x就代表十六进制
        int num3 = 0xc;
        printf("%d
    ", num3);
    //     %x是以十六进制的方式输出一个整数
        printf("%x
    ", num); 

    进制转换:

      二进制 --> 十进制

        1  2  4  8  …

      二进制  --> 八进制

        三位二进制表示一位八进制

      二进制  --> 十六进制

        四位二进制表示一位十六进制

    原码 反码 补码:

    /*
         12的二进制
         12在内存中存储的是它的补码
         00000000  00000000 00000000 00001100
         正数的特点:(三码合一) 正数的原码就是TA的反码就是TA的补码    
         -12
         二进制的最高位我们称之为符号位 
         如果符号位是0代表是一个正数,
         如果符号位是1代表是一个负数    
         10000000  00000000 00000000 00001100 (-12的原码)
         11111111  11111111 11111111 11110011(反码, 符号位不变其它位取反)
         11111111  11111111 11111111 11110011
        +00000000  00000000 00000000 00000001
         _____________________________________________
         11111111  11111111 11111111 11110100(补码 , 反码+1)     
    
         结论:无论正数负数在内存中存储的都是补码        
    
         11111111  11111111 11111111 11110101 (补码)
        -00000000  00000000 00000000 00000001  (-1)
         _____________________________________________
         11111111  11111111 11111111 11110100 (反码)
         10000000  00000000 00000000 00001011 (原码)    
         */ 

    位运算规律:

      & 按位与

           特点:只有对应的两位都是1才返回1 否则返回0

           规律:任何数按位与上1结果还是那个数

      | 按位或

           特点:只要对应的两位其中一位是1就返回1

           口诀:一真则真

      ^ 按位异或

           特点:对应的两位不相同返回1 相同返回0

           多个整数按位异或的结果和顺序无关

           int result2 = 9 ^ 5 ^ 6;

           int result2 = 9 ^ 6 ^ 5;

           相同整数按位异或结果是0

           int result3 = 9 ^ 9;

           任何整数按位异或上0结果不变

           int result4 = 9 ^ 0 ;

           任何整数按位异或上另一个整数两次结果还是那个数

           int result5 = 9 ^ 9 ^ 5;

           int result6 = 9 ^ 5 ^ 9;

      ~ 按位取反

            特点: 0变1 1变0

      << 左移

              a << n 把整数a的二进制位往左边移n位

              移出的位砍掉,低位补0, 发现左移会把原有的数值变大

              左移的应用场景:当要计算某个数乘以2的n次方的时候就用左移,效率最高

              注意点:左移有可能改变数值的正负性

      >> 右移

           a >> n 把整数a的二进制位往右边移n位

           移出的位砍掉, 缺少的以为最高位是0就补0是1就补1(是在当前操作系统下)

           右移的应用场景:当要计算某个数除以2的N次方的时候就用右移,效率最高

    位运算练习:

    #include <stdio.h>
    void printBinay(int value); 
    
    int main(int argc, const char * argv[]) {
        /*
         要求定义一个函数, 传入一个整数, 输出该整数的二进制
         %i %o %x    
         0000 0000 0000 0000 0000 0000 0000 1001
        &0000 0000 0000 0000 0000 0000 0000 0001     
         // 1.让9的二进制向右移31, 就可以获取到9得最高位的二进制, 然后让9的二进制的最高位和1相&, 那么就可以获得9的最高位
         // 2.让9的二进制向右移30, 就可以获得9二进制的第二位
         // 3.以此类推, 直到0位置    
    
         技巧:
         1.任何数与1相&都是那个数
         2.利用位移取出每一位
         */
        int num = 15;
        printBinay(num);
        return 0;
    }
    
    void printBinay(int value)
    {
        // 1.定义变量需要向右移动的位数
        int offset = 31;
        // 2.通过循环取出每一位
        while (offset >=0) {
            int result  = (value >> offset) & 1;
            printf("%i", result);
            // 3.每次取出一位就让控制右移的变量-1
            offset--;
            if ((offset+1) % 4 == 0) {
                printf(" ");
            }
        }
        printf("
    ");
    }


     

  • 相关阅读:
    UIWebView控件中 字体大小和字体样式的修改
    IOS statusBarStyle 设置
    SSZipArchive解压失败的原因
    uiimageview 的 animation 动画
    App网络管理
    系统日志输出工具类
    软键盘管理
    获取App应用信息
    Activity管理类
    SharePreference工具类
  • 原文地址:https://www.cnblogs.com/dx-230/p/4756004.html
Copyright © 2011-2022 走看看