1.数据类型 
    1.整型     32位操作系统占用 4字节        %d        %#x %#o 
        短整型    short int     2字节        %hd
        长整型    long int     8字节        %ld
        长长整型    long long int    16个字节 %lld
        字符型    char          1字节        %c
        
        c 语言数据类型 分为有符号和无符号 节省内存 
        int a = 100; // 有符号 32 位 第一位符号位             
        unsigned int b = 100 // 无符号
        
        char c = 100; // 0  000 1010           存储范围 -128 - 127
                     // 符号位
        unsigned char c = 10 // 0000 1010        存储范围0 - 255 
        
        测量数据类型的大小 sizeof(int/char/long) 
        
        有符号位存储形式 
        正数 就是以原码形式存在
        13   0000 1101
        负数如何存储
        -13  以补码形式存储  原码转换成补码 取反+1
        1000 1101 负数的原码
        1111 0010 负数的反码 
        1111 0011 负数的补码 
        
    2.字符型 
        以单引号形式表现  字符型数以ASCII码进行存储  
        'a' '\n' '??)'  
        我们可以通过man ascii 来查阅
        
        char a = 'A';
        char a = 65; 
    
    3.字符串的存在形式
        char *s = "abcd"; 
        char s1[5] = "abcd";

    
2.浮点型数据 
    它的存储和运算形式 比整数复杂 效率很低基本上是整型的20%
    float    单精度    输出格式%f        最小精确度 10^(-37)  最大值 10^38            
    double    双精度  输出格式%lf        最小精确度 10^(-307)  最大值 10^308
    long double    长双精度 输出格式%llf 最小精确度 10^(-4931)  最大值 10^4932

3.布尔型数据 真  占用一个字节 
    bool  a = 100;
    bool  a = -100;
    bool  a = 0.1;
    bool  a = -0.1;
    bool  a = true;    // 标准写法
    
    布尔值为假
    bool a = 0;
    bool a = false;    // 标准写法
    
4.数据类型转换            (4byte)
    char  short  int    long    float  double  long double
    从小变大
    强制转换        int a;   强制转换 (float)a;   int a;   char *p = (char *)&a
                    用户自己定义 
    
    隐形转换         int a = 1.414; 操作系统只会取整数值 1 小数会被抛弃
                    系统按照规定取值 
    
    
    int a = 100;
    char c = 'v';
    float d = 1.2;
    a+b+d ---> float 
    
5.常量的表现形式
    100     整型
    100L     长整型
    100LL     长长整型
    100ULL  无符号长长整型






/********************************标准输入和输出***************************/
1.格式化输出IO函数
    标准输出    printf        stdout    显示屏
    标准输入    scanf        stdin    键盘
    标准出错    perror        stderr    显示屏


    1.1 printf的使用方法
        1.1.1printf("输出格式的规定",参数列表);
            只输出字符串 没有额外参数 
            printf("hello world\n");

        1.1.2printf("输出格式",参数列表);
            char *s = "zhangfei";
            printf("name is %s\n", name);
            
            int a = 100;
            printf("name is %s\t age is %d\n", name, age);
            参数要跟规定的格式保持一致
            
            %s 字符串输出
            %c 单个字符输出
            %d 整型输出
            %x 十六进制输出
            %o 八进制输出
            %p 输出地址
            %f 浮点型输出
            %ud 无符号整型输出
            %ld 长整形输出
            %hd 短整型输出
            %e  科学计数法输出
            %.nf 小数点后n位输出
            %mf 输出m位 以右对其
            
        1.1.3标准输出是有缓冲区的
            所以想要把输出 一定要把输出从缓冲读取到
            缓冲区输出 遇到\n 则输出改行信息             


    1.2 snprintf  字符串拼接
    
        char buf[32];
        snprintf( buf, 32, "music is %s.mp3\n", "qilixiang");
        music is qilixiang.mp3 会存储前32个字节放到 buf里面

    2.1 标准输入 sacnf gets fgets getchar ....
                %s 他会默认读取下一个单词  hello world 他永远只读取第一个单词 hello
                scanf 遇到空格和换行符就会结束
        
        scanf("输入格式",输入地址);
        返回值 是成功输入的个数 
        
        我们在使用scanf 不要在输入格式中添加多余信息
    

        sacnf 返回值 代表成功读取的信息



/****************************************运算符***************************************/

1.算术运算符 
    +  -  *  /  %  ++  --
    
    a + b * c / d 运算顺序根据优先级来确定
    
    ++ 把它理解成两个运算 a++  a = a + 1    a + 1  a++
    ++a和a++  
        ++a 他是先自加 然后在做运算   
        a++ 先运算 然后再自加

2.逻辑运算符
        逻辑运算符 两侧经常是表达式  表达式的结果分为真和假 
        ||     &&  !
        或     与  非
    

        2.1 || 运算符 只要有一个表达式为真那么这个语句为真
              只有两个表达式都为假 这个语句才为假 
    
    
                a = b = 1;    
                if(a++ || b++)
                {
                    printf("a = %d\t b =%d\n", a, b); // 2 1
                }


        2.2 && 运算符 只要有一个表达式为假那么这个语句就为假
                      只有两个表达式都为真 这个语句才为真


                表达式一个数是个位数 
                
                if(10 > a > 0) 一定错误 
                if(a > 0 && a < 10) 正确

                a = b = 0;
                if(a++ && b++ )
                {
                
                }
                printf("a = %d\t b =%d\n", a, b); // 1 0
                
        2.3 ! 真的表达式  取非就为假  假的变真
        
                a = b = 1;
                if( !(a > b) ) 
                {
                    printf("真")
                }
            
3.位运算符
        ~    按位取反
        |    按位或
        &   按位与
        ^     按位异或
        <<  左移
        >>  右移

        基本上所有的位操作都发生在底层 因此底层我们数据基本上都是定义成无符号型
        但是我们要参加面试 
        
        3.1 按位取反   -(n + 1)  取反规则1变0 0变1
            char a = 3      0000 0011    原码            char a = -3    1000 0011
            ~a       =     1111 1100   补码                       1111 1100
                         1111 1011                      -3补码 1111 1101    补码
                         1000 0100    -4                ~a     0000 0010  2        
        
        
        3.2 按位或       位或规则 只要有一个为1 就为1  只有两个为0 才为0
            char a = 3  0000 0011
            char b = 4  0000 0100
            a | b  = 7  0000 0111
            
            
        3.3 按位与     位与规则  只要有一个为0 就为0  只有两个为1 才为1
            char a = 3  0000 0011
            char b = 4  0000 0100
            a & b  = 0  0000 0000
        
        3.4 按位异或   异或规则  相同为0  不同为1
            char a = 3      0000 0011
            char b = 4      0000 0100
            c = a ^ b  = 7  0000 0111 
            c ^ b = a        0000 0011
            
            连续两次异或等于本省

        3.5 左移操作         多出去数据丢弃 空缺的补0
        
            unsigned char  a = 3  0000 0011 
            a << 2     0000 001100  0000 1100  12  如果左移丢弃的数据为0 那么左移几位就相当于*2几次方
                       丢        补
                       
            右移操作
            
            unsigned char a = 3  0000 0011
            a >> 2               0000 00 0011 --> 0000 0000   0 
            
            右移负数 (开发中不存在 只存在面试题目) 知识全面性  
            char a = -3   11111101 补码
            a >> 2        11111111 01     
                          11111110
                          10000001  -1 
                          
                          
            左移右移操作你们只需要知道 多出去的丢弃 空出来的补0
            开发中底层的数据基本上都是无符号型 不存在负数右移左移情况
        
4.赋值运算 
        左值    =  右值
        注意   左值一定是可读可写  
        
        错误写法
            char a[3];
            a = 100;  数组名是地址常量
            
            100 = a; 100 是一个常量
            
            int const i;
            i = 100;  i只读的变量 不能赋值
            
5.复合运算    它的优点是 相当于一步操作 效率提高 
    
    +=  -= *= /= %= |=
    
    a += 5 --> a = a + 5 

    a /= 5     a = a / 5
    
    a |= 5     a = a | 5
    ....
    
6.逗号运算 
    从左到右运算 
    以最右边的值作为结果

7.return 
    表示函数结束 
    可以返回值给调用者
    释放一些函数资源处理一些善后工作 处理预处理函数清理缓冲区等
        
        
        
/*************************************控制流**************************************/
1.选择语句 
    if(表达式1) 表达式是一个布尔值 非零即真
    {
        代码1
    }
    else    可以省略
    {
        代码2
    }

    
    if(表达式)    if语句为真 则实行语句1 仅仅下一条语句生效 
        语句1;
        语句2;


    // 只会发生一种清况 一旦有一个表达式成立 下面的语句不会执行 
    if(表达式1)
    {
        代码段1
    }
    else if(表达式2)
    {
        代码段2
    }
    ...
    else
    {
        代码段3
    }


    switch case 语句 
    
    
    switch(变量)
    {
        case 常量 :    代码1;
                        break;
    
    
        case 常量 :    代码1;
                        break;
    
    
        case 常量 :    代码1;
                        break;
    
    
        defulat    :    可以省略;
    }



2.循环语句 
    2.1
    while(表达式)
    {
        循环代码;
        
    }
    只要表达式为真 就会执行循环代码 
    反之跳过循环代码 往下执行 


    2.2
    do
    {
    
        循环代码
    
    }while(表达式);

    先执行一遍代码段 再来判断表达式 如果为真 继续执行循环语句
    如果为假则跳过 
    
    
    do
    {
        一次性执行完 
        // 宏定义写在此处 保证宏函数正常执行 
    
    }while(0);


        continue; 退出此次循环 从下一次循环继续 
        break;    终止循环 直接跳出 
    
    


    2.3
    for(表达式1;表达式2;表达式3)
    {
        循环代码
    }

    第一步执行 表达式1  
    第二步执行 表达式2  根据表达式2的真假  
    真执行循环代码 继续执行表达式3 然后再次执行表达式2循环
    如果为假 则直接跳过循环代码 执行下面语句
    
    
    2.4
    goto  语句 
    
    flag : 标签 
    
    goto flag; 跳到flag此处 
    
    goto 语句我们经常在上层不适用因为阅读性差 破坏代码整体性(破坏我们栈内存)
        一般我们在做一些出错判断会使用goto

 

1.数据类型 1.整型 32位操作系统占用 4字节%d%#x %#o 短整型short int 2字节%hd长整型long int 8字节%ld长长整型long long int16个字节 %lld字符型char 1字节%cc 语言数据类型 分为有符号和无符号 节省内存 int a = 100; // 有符号 32 位 第一位符号位 unsigned int b = 100 // 无符号char c = 100; // 0  000 1010   存储范围 -128 – 127 // 符号位unsigned char c = 10 // 0000 1010    存储范围0 – 255 测量数据类型的大小 sizeof(int/char/long) 有符号位存储形式 正数 就是以原码形式存在    13   0000 1101负数如何存储-13  以补码形式存储  原码转换成补码 取反+11000 1101 负数的原码1111 0010 负数的反码 1111 0011 负数的补码 2.字符型 以单引号形式表现  字符型数以ASCII码进行存储  ‘a’ ‘\n’ ‘??)’  我们可以通过man ascii 来查阅char a = ‘A’;char a = 65; 3.字符串的存在形式char *s = “abcd”; char s1[5] = “abcd”;
2.浮点型数据 它的存储和运算形式 比整数复杂 效率很低基本上是整型的20%float单精度输出格式%f最小精确度 10^(-37)  最大值 10^38double双精度  输出格式%lf最小精确度 10^(-307)  最大值 10^308long double长双精度 输出格式%llf 最小精确度 10^(-4931)  最大值 10^4932
3.布尔型数据 真  占用一个字节 bool  a = 100;bool  a = -100;bool  a = 0.1;bool  a = -0.1;    bool  a = true;// 标准写法布尔值为假bool a = 0;bool a = false;// 标准写法4.数据类型转换        (4byte)char  short  int    long    float  double  long double从小变大强制转换int a;   强制转换 (float)a;   int a;   char *p = (char *)&a用户自己定义 隐形转换 int a = 1.414; 操作系统只会取整数值 1 小数会被抛弃系统按照规定取值 int a = 100;char c = ‘v’;float d = 1.2;a+b+d —> float 5.常量的表现形式100 整型100L 长整型100LL 长长整型100ULL  无符号长长整型





/********************************标准输入和输出***************************/1.格式化输出IO函数标准输出printfstdout显示屏标准输入    scanfstdin键盘标准出错    perrorstderr显示屏

1.1 printf的使用方法1.1.1printf(“输出格式的规定”,参数列表);只输出字符串 没有额外参数 printf(“hello world\n”);
1.1.2printf(“输出格式”,参数列表);char *s = “zhangfei”;printf(“name is %s\n”, name);int a = 100;printf(“name is %s\t age is %d\n”, name, age);参数要跟规定的格式保持一致%s 字符串输出%c 单个字符输出%d 整型输出%x 十六进制输出%o 八进制输出%p 输出地址%f 浮点型输出%ud 无符号整型输出%ld 长整形输出%hd 短整型输出%e  科学计数法输出%.nf 小数点后n位输出%mf 输出m位 以右对其1.1.3标准输出是有缓冲区的所以想要把输出 一定要把输出从缓冲读取到缓冲区输出 遇到\n 则输出改行信息

1.2 snprintf  字符串拼接char buf[32];snprintf( buf, 32, “music is %s.mp3\n”, “qilixiang”);music is qilixiang.mp3 会存储前32个字节放到 buf里面
2.1 标准输入 sacnf gets fgets getchar ….%s 他会默认读取下一个单词  hello world 他永远只读取第一个单词 helloscanf 遇到空格和换行符就会结束scanf(“输入格式”,输入地址);返回值 是成功输入的个数 我们在使用scanf 不要在输入格式中添加多余信息
sacnf 返回值 代表成功读取的信息


/****************************************运算符***************************************/
1.算术运算符 +  –  *  /  %  ++  —a + b * c / d 运算顺序根据优先级来确定++ 把它理解成两个运算 a++  a = a + 1    a + 1  a++++a和a++  ++a 他是先自加 然后在做运算   a++ 先运算 然后再自加
2.逻辑运算符逻辑运算符 两侧经常是表达式  表达式的结果分为真和假 || &&  !或 与  非
2.1 || 运算符 只要有一个表达式为真那么这个语句为真  只有两个表达式都为假 这个语句才为假 a = b = 1;if(a++ || b++){printf(“a = %d\t b =%d\n”, a, b); // 2 1}

2.2 && 运算符 只要有一个表达式为假那么这个语句就为假  只有两个表达式都为真 这个语句才为真

表达式一个数是个位数 if(10 > a > 0) 一定错误 if(a > 0 && a < 10) 正确
a = b = 0;if(a++ && b++ ){}printf(“a = %d\t b =%d\n”, a, b); // 1 02.3 ! 真的表达式  取非就为假  假的变真a = b = 1;if( !(a > b) ) {printf(“真”)}3.位运算符~按位取反|按位或&   按位与^ 按位异或<<  左移>>  右移
基本上所有的位操作都发生在底层 因此底层我们数据基本上都是定义成无符号型但是我们要参加面试 3.1 按位取反   -(n + 1)  取反规则1变0 0变1char a = 3 0000 0011原码char a = -3    1000 0011~a   =     1111 1100   补码   1111 1100 1111 1011  -3补码 1111 1101补码 1000 0100    -4~a     0000 0010  23.2 按位或   位或规则 只要有一个为1 就为1  只有两个为0 才为0char a = 3  0000 0011char b = 4  0000 0100a | b  = 7  0000 01113.3 按位与     位与规则  只要有一个为0 就为0  只有两个为1 才为1char a = 3  0000 0011char b = 4  0000 0100a & b  = 0  0000 00003.4 按位异或   异或规则  相同为0  不同为1char a = 3  0000 0011char b = 4  0000 0100c = a ^ b  = 7  0000 0111 c ^ b = a0000 0011连续两次异或等于本省
3.5 左移操作 多出去数据丢弃 空缺的补0    unsigned char  a = 3  0000 0011 a << 2     0000 001100  0000 1100  12  如果左移丢弃的数据为0 那么左移几位就相当于*2几次方   丢补   右移操作unsigned char a = 3  0000 0011a >> 2               0000 00 0011 –> 0000 0000   0 右移负数 (开发中不存在 只存在面试题目) 知识全面性  char a = -3   11111101 补码a >> 2        11111111 01       11111110  10000001  -1     左移右移操作你们只需要知道 多出去的丢弃 空出来的补0开发中底层的数据基本上都是无符号型 不存在负数右移左移情况4.赋值运算 左值=  右值注意   左值一定是可读可写  错误写法char a[3];a = 100;  数组名是地址常量100 = a; 100 是一个常量int const i;i = 100;  i只读的变量 不能赋值5.复合运算它的优点是 相当于一步操作 效率提高 +=  -= *= /= %= |=a += 5 –> a = a + 5 
a /= 5     a = a / 5a |= 5     a = a | 5….6.逗号运算 从左到右运算 以最右边的值作为结果
7.return 表示函数结束 可以返回值给调用者释放一些函数资源处理一些善后工作 处理预处理函数清理缓冲区等/*************************************控制流**************************************/1.选择语句 if(表达式1) 表达式是一个布尔值 非零即真{代码1}else可以省略{代码2}
if(表达式)if语句为真 则实行语句1 仅仅下一条语句生效 语句1;语句2;

// 只会发生一种清况 一旦有一个表达式成立 下面的语句不会执行 if(表达式1){代码段1}else if(表达式2){代码段2}else{代码段3}

switch case 语句 switch(变量){case 常量 :代码1;break;case 常量 :代码1;break;case 常量 :代码1;break;defulat:可以省略;}


2.循环语句 2.1while(表达式){循环代码;}只要表达式为真 就会执行循环代码 反之跳过循环代码 往下执行 

2.2do{循环代码}while(表达式);
先执行一遍代码段 再来判断表达式 如果为真 继续执行循环语句如果为假则跳过 do{一次性执行完 // 宏定义写在此处 保证宏函数正常执行 }while(0);

continue; 退出此次循环 从下一次循环继续 break;终止循环 直接跳出 

2.3for(表达式1;表达式2;表达式3){循环代码}
第一步执行 表达式1  第二步执行 表达式2  根据表达式2的真假  真执行循环代码 继续执行表达式3 然后再次执行表达式2循环如果为假 则直接跳过循环代码 执行下面语句2.4goto  语句 flag : 标签 goto flag; 跳到flag此处 goto 语句我们经常在上层不适用因为阅读性差 破坏代码整体性(破坏我们栈内存)一般我们在做一些出错判断会使用goto




原文地址:http://www.cnblogs.com/zlxxc/p/16898100.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性