操作符详解

操作符详解

算术操作符

  1. +,-,*,/
  2. 除法(-):得到商,如果结果是小数,int类型只会打印整形,解决方法:
    • 将商类型转化
    • 直接将变量定义为double
  3. 余数(%):只用于整数

移位操作符

  1. >>和<<左移操作符
  2. 右移两种移法
    • 算术右移:右边丢弃一位(存储的二进制),然后左边增加符号位(当前主要)
    • 逻辑右移:右边丢弃,左边补0
  3. 例子:
    1
    2
    3
    4
    5
    6
    7
    8
    int a =16;
    int b=a>>1;
    printf("%d",b);
    //结果是8(2^3)
    //因为16的二进制是(32位)
    //0(27位)10(4位)
    //丢弃一位10(27位)10(3位)
    //右移一位有除2二的效果
  4. 补充知识:
    • 原码,反码,补码
    • 整数的3码相同。负数的反码为:符号位不变,其他位按位取反。补码:负数的存储格式,为反码加1
  5. 左移:左边丢弃,右边补零

位操作符

  1. &(按位与),|按位与,
  2. &只要有0,则为0,两个1,才为
    1
    2
    3
    4
    5
    6
    7
    int a=3;
    int b=5;
    int c=a&b;
    //a在计算机中为00000000000000000000000000000011
    //b在计算机中为00000000000000000000000000000101
    //按位与: 00000000000000000000000000000001
    //切记是补码进行按位与
  3. | 按位或:补码,有1则为1
  4. ^按位异或:2进制补码,相同为1,相异为0
  5. 实现两数的交换
    • 倒水法(创建临时变量)
    • 加减法(值大了,容易溢出)
    • ^法(除了代码难读,没有缺点)

赋值操作符

  1. 连续赋值
    1
    x=y=z=1;
  2. 判断为==
  3. 复合操作符:
    • +=,-=等等

单目操作符

  1. !:把假变成真,把真变成假
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //a为真打印
    if(a)
    {
    printf("%d",a);
    }
    //a为假打印
    if(!a)
    {
    printf("%d",a);
    }
  2. &(取地址):配合指针
    1
    2
    3
    4
    int a=10;
    int* p=&a;
    *p=20;//让a等于20
    return 0;
  3. sizoef:计算所占空间的大小,单位是字节,注意区分,strlen(数组的长度,不包括‘\0’);
    • 指针大小,要不是4(32位系统)个字节,要不是8(64位字节)个字节
    • 内部表的式不参加运算
      1
      2
      3
      4
      5
      short s=0;
      int a=10;
      printf("%d",sizoef(s=a+5));
      printf("%d",s);
      //结果为2和0,因为不参与运算
  4. ~(按位(二进制)取反):将二进制按位取反,所有位按位取反
  5. ++a:先++,后使用
  6. a++:先使用,再++
    1
    2
    3
    int a=0;
    printf("%d",a++);
    //结果位0;
  7. (类型):强制类型转换

逻辑操作符

  1. &&(逻辑与)并且;
    1
    2
    3
    4
    5
    int a=10;
    int b=20;
    int c=a&&b;
    printf("%d",c);
    //结果为1,因为a,b都为真
    1
    2
    3
    4
    5
    int i=0,a=0,b=2,c=3,d=4;
    i=a++ && ++b && d++;
    printf("%d,%d,%d,%d",a,b,c,d);
    //结果为i=0,a=1,b=2,c=3,d=4;
    //因为先使用a,a=0,为假,后面不计算
  2. &&,||:对于&&来说只要前面是假,后面不算,对于||来说只要前面是真,就不算

条件操作符

  1. exp1?exp2:exp3:如果表达式一位真,则表达式二计算,且为整个表达式的结果,反之是表达式3

  2. ,(逗号表达式):简便代码

下标引用操作符

  1. []:常用于数组

函数调用操作符

  1. ():用于函数

访问一个结构的成员

  1. struct: 创建一个结构体

  2. .成员名

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include<stdio.h>
    //相当于盖房子时的规划图,name,age,id为成员
    strcut stu
    {
    char name[10];
    int age;
    char id[20]
    };//注意分号
    int main()
    {
    strcut stu s1={"chg",20,"2022124032"};//往规划图里面加东西
    struct stu* ps=&s1;//得到s1的地址
    printf("%s",si.name);//1
    printf("%d",s1.age);//2.查找成员
    printf("%d",si.id);//3
    printf("%s",(*ps).name);//与1相同
    printf("%s",ps->name);//与1相同
    return 0;
    }

表达式的求和顺序

由操作的优先级和结合性决定

  1. 隐式类型转换:

    • 整型提升:C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型;

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      #include<stdio.h>

      int main()
      {
      char a=3;
      //char 占1个字节,一共8个字符
      //a=00000011
      char b=127;
      //b=01111111
      char c=a+b;//相加转换为整形
      //a=00000000000000000000000000000011
      //b=00000000000000000000000001111111
      //c=11111111111111111111111110000010
      //根据符号数补齐
      printf("%d",c);
      return 0;
      }


    • 算术运算:将低精度的转换为高精度的

  2. 操作符的属性

    • 优先级:优先级高的先算
    • 结合性:
    • 求值顺序:

操作符详解
https://tsy244.github.io/2023/04/20/C/操作符详解1/
Author
August Rosenberg
Posted on
April 20, 2023
Licensed under