zoukankan      html  css  js  c++  java
  • C:进制

     进制、C语言内存分配

    1.对于进制
    10进制 (0 - 9)
    16进制 (0——9 A B C D E F)
    硬件中的高低电平(0 和 1表示)所以计算机用 二进制
    机器语言就是由 0 和 1 组成的一串组合的语言
    字节是计算机里最小的计量单位 1 字节代表 8 个二进制位 (0——255)

    2.十进制转换N进制规则:
    连除倒取余数
    ——>2进制 ? 1010
    ——>2进制 ? 1111
    ——>2进制 ? 101111
    N进制转换为十进制:
    2进制换换为10进制 按权求和
    = 1*100+2*10+3*1;
    ——>1*32+0*16+1*8+1*4*+0*2+1*1 = 45;
    ——>1*128+1*64+0*32+1*8+0*4+1*2+1*1 = ;

    10进制转换为8进制
    ——>8进制 ? 12
    ——>8进制 ? 17
    ——>8进制 ? 57
    8进制转换十进制
    ——》1*64+2*8+5*1 = 85

    基础知识

    //计算机的 数据的存储都是按照二进制的补码的形式进行存储的
    //    原码
    //    反码
    //    补码
    //    负数的最高位规定为符号位 1 表示为负数,在参与运算的时候也把符号位考虑进来
    //    负数的补码 就是本身除了符号位之外的按位取反再加1
    //    正数的补码 就是本身
    //    反码      就是按位取反(符号位不变)
    //    负数的补码 就是本身的反码再加1
        //逻辑运算的非 符号 ~
    //    int a = 5;//0101   ~a 1010 + 1     1110  就是 -6
    //    printf("%d	
    ",~a);
        //设断点,看变量的内存位置
        //内存的分区
        //栈区 堆区 常量区 全局静态区 代码区
        //栈区的内存分配原则:从高到底分配,从低到高存取
        int a = 5, b = 3;
        printf("a : %p
    ",&a);//打印出变量的地址
        printf("b : %p
    ",&b);
        //获取数据存取的时候的两种方式:1.直接访问(直接呼其名字)   2.间接访问(获取地址,通过地址来操作)
        //说到地址的时候就是指针   数组的名字就是首地址
        int arr[5] = {0};
        printf("数组的地址:%p	
    ",&arr[0]);
        printf("数组的地址:%p	
    ",arr);//数组的名字就是数组的首地址也就是数组第一个元素的内存地址
    /*
        十进制       10
        二进制     0b10
        八进制      010
        十六进制   0x10
        */
        int a = 2;
        int b = 0b10;
        int c = 0x125;
        //二进制数修饰符号  0b
        //八进制数修饰符号    0
        //十六进制修饰符号  0x
        int x = 0b1010;
        printf("十进制输出x = %d 
    ",x);
        //八进制输出
        printf("八进制输出 x = %O 
    ",x);//是字母的O %O 注意不是0哦
        //十六进制输出
        printf("十六进制小写的输出x = %0x 
    ",x);//是 %0X 注意是数字的0 不是字母哦  如果0x对应的x要是小写的x则后面输出的A.....则按对应的大小写输出
    /*总结格式转换符
         %d    整型
         %hd   短整型
         %ld   长整型
         %f    单精度浮点型
         %g    省去后面多余的0(浮点型)
         %lf   double型
         %c    字符型
         %s    字符型
         %O    八进制数
         %0X   十六进制大写输出 %0x 十六进制小写字母输出
         %lu   unsingned long  无符号长整型
         %p    打印变量的内存地址 注意是小写的p 写成大写的P则不行
         */
     //交换两个
        //^ 位运算符
        //通过异或 ^ 交换两个数
        //优点:不用第三方变量,避免超出范围  缺点:消耗内存,效率低,速度慢
    //    int num1 = 2,num2 = 5;
    //    num1 = num1 ^ num2; // num1 = 7
    //    num2 = num1 ^ num2; // num2 = 2
    //    num1 = num1 ^ num2; // num1 = 5
    //    printf("num1 : %d num2 : %d ",num1,num2);
        
        //按位与    & 同为 1 就为 1 有一个为 0 就为 0
        //按位或    | 同为 0 就为 0 有一个为 1 就为 1
        //按位异或  ^ 相同为 0 不同为 1
        //左移     << ;向左移动一位 每次左移一位就相当于 原来数字 * 2
        //右移     >> ;向右移动一位 每次右移一位就相当于 原来数字 / 2 

    实战 

    //    int b1 = 0b1011;
    //    int b2 = 0b0110;//改为1001测试
    //    int result = b1 & b2;//结果为0010
    //    printf("result = %d
    ",result);
        
    //        int b1 = 0b1011;
    //        int b2 = 0b0010;//改为1001测试
    //        int result = b1 | b2;//结果为0010
    //        printf("result = %d
    ",result);
        
    //        int b1 = 0b1011;
    //        int b2 = 0b0110;//改为1001测试
    //        int result = b1 ^ b2;//结果为0010
    //        printf("result = %d
    ",result);
        
    //        int b1 = 0b1011;
    ////        int b2 = 0b0110;//改为1001测试
    //    int res = b1 << 1;
    ////        int result = b1 & b2;//结果为0010
    //        printf("result = %d
    ",res );
        
        int a = 0b0100;// 4
        int res = a >> 2;//0001
        printf("%d	
    ",res);
        int res1 = res >> 2;
        printf("%d	
    ",res1);
        printf("%d	
    ",0b0101 << 1);//左移动后后面空的位置补 0

     C语言中的内存分配参考

    语句

    If(条件表达式){语句块;}这里有可能有陷阱,如果if()后多一个;号 一般很难查找出来
    if(条件表达式1){语句块2;}else if(条件表达式2){语句块2}…else{语句块n;}
    if(条件表达式){语句块1}else{语句块2}
    while(条件表达式){语句块}//其中条件表达式里面不能够出现像:a = 5的表达式 可以出现判断的语句如:a == 5
    for (1.循环变量初始化; 2.循环条件; 3.循环增量) {
    do { } while(--b) 与 do{}while(b--)的区别
    for 循环循环的次数计算   
    //    int i =  0;
    //    //循环次数的计算,( 不满足条件的第一个数 - 循环变量的初始值 )/ 每次循环的增量
    //    for(i ; i < 200; i = i + 2)
    在if()里面的判断语句时候  要把数字写前面  (0 == s)这样万一==写成= 也会报错,方便后面检查。

    数组元素在分配地址的时候,是先分配最外层的元素的地址比如 a[5] 来说,先分配 a[4] 的地址,然后a[3]……

  • 相关阅读:
    vue Bus事件用法与bug
    移动端超出三行显示第三行显示省略号+查看全部
    Vuex
    vue点击旋转,再点击复原
    vue项目(cli-3)替换浏览器logo
    悬浮广告(二)vue版本
    悬浮广告(一)html版本
    vue下获得经纬度省市区
    一个可以输出当前移动设备机型(安卓,ios)系统版本的html页面
    谱聚类(spectral clustering)原理总结
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/4697337.html
Copyright © 2011-2022 走看看