• C语言知识总结(2)


    选择结构-if

    if(表达式) {}  

    {}为作用域

    多重if-else  例如:

    #include <stdio.h>
    int main(){
      int amount = 888888;
      if(amount<=0){
        printf("没有购物不能获奖");
      }else if(amount%888==0){
        printf("恭喜你获得一等大奖!");
      }else if(amount%88==0){
        printf("恭喜你获得二等奖");
      }else if(amount%8==0){
        printf("恭喜你获得鼓励奖");
      }else{
        printf("谢谢参与");
      }
      return 0;
    }

    嵌套if-else  例如:

    #include <stdio.h>
    int main(){
      double speed = 10.71;  //百米速度
      int male = 1; //1代表男,0代表女
      if(speed<12){
        if(male){
          printf("进入男子组决赛");
        }else{
          printf("进入女子组决赛");
        }
      }else{
        printf("没有进入决赛,继续努力!");
      }
      return 0;
    }

    选择结构-switch

    switch(表达式) {case 数值1: break; … default: break;}

    #include <stdio.h>
    int main(){
      int day = 4;
      switch(day){
        case 1:
            printf("星期一吃青菜
    ");
            break;
        case 2:
            printf("星期二吃鱼
    ");
            break;
        case 3:
            printf("星期三吃肉
    ");
            break;
        case 4:
            printf("星期四吃面条
    ");
            break;
        default:
            printf("平时只能喝汤
    ");
            break;
      }
      return 0;
    }

    注意:每个case后面是否有break

    循环结构-while

    • while(表达式) { }
    • continue:用于跳过本次循环体剩余语句,进入下一次循环的条件判断,continue只是跳过当前的循环体,并没有跳出整个循环。

    • break的使用:某次的时候停止循环。

    循环结构-do while

    一定会执行一次循环体

    while 和 do while 比较

    inti=0;
    while(i<0){
    i++;
    }
    // i = 0
    inti=0;
    do{
    i++;
    }while(i<0);
    // i = 1

    循环结构-for

    for(参数初始化;条件判断;参数更新){
      //循环操作
    }

    for(;;)  这个是个死循环

    for括号内的三个语句都是表达式,执行次序如下:

    1. 运行表达式1(参数初始化)
    2. 运行表达式2(条件判断),判断是否为真,若为真执行循环操作,若为假则结束循环
    3. 运行表达式3(参数更新),更新参数,进入步骤2执行下一轮循环

    查看一个整数的二进制可用如下函数:

    // 输出整数的二进制形式
    void putBinary(int n)
    {
    int bits = sizeof(n) * 8;
    while (bits-->0) {
    printf("%d", n>>bits&1);
    if (bits%4==0) printf(" ");
        }
    printf("
    ");
    }

    1个字节等于8bit

    • 可以连续使用2个long,也就是long long。一般来说,long long的范围是不小于long的,比如在32bit编译器环境下,long long占用8个字节,long占用4个字节。不过在64bit编译器环境下,long long跟long是一样的,都占用8个字节。
    • 还有一点要明确的是:short int等价于short,long int等价于long,long long int等价于long long

    signed 和 unsigned

    1>首先要明确的:signed int等价于signed,unsigned int等价于unsigned

    2> signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数。

    • signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0。其实int的最高位本来就是符号位,已经包括了正负数和0了,因此signed和int是一样的,signed等价于signed int,也等价于int。signed的取值范围是-231 ~ 231 - 1

    • unsigned:表示无符号,也就是说最高位并不当做符号位,所以不包括负数。在64bit编译器环境下面,int占用4个字节(32bit),因此unsigned的取值范围是:0000 0000 0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 1111 1111,也就是0 ~ 232 - 1

    位运算

    1、&按位与

    1>功能:  只有对应的两个二进位均为1时,结果位才为1,否则为0。

    2>举例:  比如9&5,其实就是1001&101=1,因此9&5=1

    3>规律:  二进制中,与1相&就保持原位,与0相&就为0

    2、|按位或

    1>功能:  只要对应的二个二进位有一个为1时,结果位就为1,否则为0。

    2>举例:  比如9|5,其实就是1001|101=1101,因此9|5=13

    3、^按位异或

    1>功能:  当对应的二进位相异(不相同)时,结果为1,否则为0。(二进制加法判断)

    2>举例:  比如9^5,其实就是1001^101=1100,因此9^5=12

    3>规律:

    • 相同整数相^的结果是0。比如5^5=0

    • 多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6

    • 因此得出结论:a^b^a = b

    4、~ 取反

    对整数a的各二进位进行取反,符号位也取反(0变1,1变0)

    5、<< 左移

    • 把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方

    • 由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

    6、>> 右移

    • 把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方
    • 为正数时,符号位为0,最高位补0
    • 为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定

    运算符的优先级(从高到低)

    优先级

    描述

    运算符

    1

    括号

    ()、[]

    2

    正负号

    +、-

    3

    自增自减,非

    ++、--、!

    4

    乘除,取余

    *、/、%

    5

    加减

    +、-

    6

    移位运算

    <<、>>、>>>

    7

    大小关系

    >、>=、<、<=

    8

    相等关系

    ==、!=

    9

    按位与

    &

    10

    按位异或

    ^

    11

    按位或

    |

    12

    逻辑与

    &&

    13

    逻辑或

    ||

    14

    条件运算

    ?:

    15

    赋值运算

    =、+=、-=、*=、/=、%=

    16

    位赋值运算

    &=、|=、<<=、>>=、>>>=

    ASCII对照表

  • 相关阅读:
    A. Difference Row
    B. Fixed Points
    命运
    Climbing Worm
    大学感想
    Constructing Roads
    lintcode605- Sequence Reconstruction- medium- airbnb google
    lintcode616- Course Schedule II- medium
    lintcode615- Course Schedule- medium
    lintcode127- Topological Sorting- medium
  • 原文地址:https://www.cnblogs.com/melodyzhy/p/4623201.html
Copyright © 2020-2023  润新知