C语言操作符详解

    xiaoxiao2022-07-03  125

     操作符分类:

     操作符分别介绍:​​​​​​

    1.算数操作符:   +  -  *  /  %

       注意: 对于%取模运算操作符要求左右操作数必须为整数.

                对于/操作符如果左右操作数为整数,执行整数除法.但只要有浮点类型执行的就是浮点类型除法

    int main() {      int a= 7/2;                 //结果为a = 3      double b = 7/2;         //结果为3.000000      double c = 7.0/2;      //结果为3.500000      double d = 7/2.0;      //结果为3.500000      return 0; } 

    2.移位操作符:     <<  左移   >>   右移  ( 逻辑右移/算术右移 )

        这里的位指的是数据存储进内存的二进制位,即补码

    int main() {     int a = 14;     printf("%d\n", a<<1);//结果为28     printf("%d\n", a>>1);//结果为7  说明是算数右移     return 0; }

          不难看出:   左移1相当于 *2  (丢弃最高位,0补最低位)   算数右移1相当于/2(左边补原来符号位)  逻辑右移(左边补0)

      3.  位操作符:  & 按位与    | 按位或   ^  按位异或

    int main() {     int a = 10;     int b = 25;     double c = 25.0;     printf("%d\n", a&b);//8     printf("%d\n", a|b);//27     printf("%d\n", a^b);//19     printf("%f\n", a&c);//编译报错     system("pause");     return 0; }

          注意: 左右操作数必须为整数.

    5.赋值操作符

    =   +=  *=  /=  %=  <<=  >>=  &=  |=  ^=

    6.单目操作符

    !           逻辑反操作-           负值+          正值&          取地址sizeof   操作数的类型长度(以字节为单位)~           对一个数的二进制进行按位取反--           前置,后置--++         前置,后置++*            间接访问操作符(解引用操作符)(类型)    强制类型转换                                                                                                                                          

    //sizeof和数组

    void test1(int arr[]) {     printf("%d\n", sizeof(arr)); //4 }  void test2(int ch[]) {     printf("%d\n", sizeof(ch));  // 4 }

      int main()   {     int arr[10] = { 0 };     int ch[10] = { 0 };     printf("%d\n", sizeof(arr));//  40     printf("%d\n", sizeof(ch));//  40     test1(arr);     test2(ch);       system("pause");       return 0;   }

    //前置++,--和后置++,--使用

    int main() {     int a = 10;     int x = ++a;//先对a自加,再进行使用 11   11     printf("%d %d\n", a, x);     int y = --a;//先对a自减,再进行使用 10    10     printf("%d %d\n", a, y);     int z = a--;//先使用,再进行自减    9     10     printf("%d %d\n", a, z);     int s = a++;//先使用,再进行自加    10     9     printf("%d %d\n", a, s);     system("pause");     return 0; }

    7.关系操作符:  >  >=   <  <=   !=   ==   (注意:只需区分==和=区别即可)

    8.逻辑操作符:  && 逻辑与     || 逻辑或

    int main() {     int i = 0, j = 0, a = 0, b = 2, c = 3, d = 4;     i = a++ && ++b && d++;     //j = a++ || ++b || d++;     printf("a=%d b=%d c=%d d=%d i=%d", a, b, c, d,i);    //a=1 b=2 c=3 d=4 i=0     //printf("a=%d b=%d c=%d d=%d j=%d", a, b, c, d, j); //a=1 b=3 c=3 d=4 j=4     system("pause");     return 0; }

    9..条件运算符

    格式:   exp1 ? exp2 :exp3

    10.逗号表达式

    exp1,exp2,exp3,.......expN

    执行规则,从左到右依次执行,,但结果是最后一个表达式的结果.

    11.下标引用,函数调用和结构体成员

    (1)下标引用操作符

    操作数:一个数组名+一个索引值

    int arr[10];//创建数组

    arr[9] = 10;//使用下标引用符

    //  [ ]的两个操作数是arr和9

    (2)函数调用操作符

    接受一个或者多个操作数:第一个是函数名,剩下的操作数就是传递给函数的参数.

    void test ()

    {

      printf( " hehe\n"  );

    }

    int main()

    {

       test();     //使用()作为函数调用操作符.

       return 0;

    }

    (3)访问一个结构的成员.

    .结构体.成员->结构体指针->成员名

    #include <stdio.h> struct stu { char name[10]; int age; char sex[5]; double score; }; void set_age1(struct Stu stu) { stu.age = 18; //结构成员访问 } void set_age2(struct Stu* stu) { pStu->age = 18; //结构成员访问 } int main() { struct Stu stu; struct Stu* pstu = &stu; //结构成员访问 stu.age = 20; //结构成员访问 set_age1(stu); pStu->age = 20; //结构成员访问 set_age2(pStu); system("pause"); return 0; }

     

    最新回复(0)