C语言运算符优先级

来源:互联网 发布:mac number 求和 编辑:程序博客网 时间:2024/06/06 05:40

//   运算符

1.  and运算(&

    通常用于二进制取位操作,将运算符两边数字转换成二进制进行运算,相同的位数均为1时结果才为1,否则结果为0.

    int a1 = 6; int b1 = 10;

    printf("%d\n",a1&b1);

 2.  or运算(|)

   采用二进制位数进行运算,相同的位数只要有一个为1,结果为1,否则为0.

    int a2 = 4; int b2 = 2;

    printf("%d\n",a2|b2);

 3.  xor运算(^

    采用二进制位数进行运算,相同位数数字相同为1,不同为0.

    int a3 = 4; int b3 = 2;

    printf("%d\n",a3^b3);

    // 一个数与同一个数异或两次,结果为本身

    // 交换值

    int x; int y;

    x = x ^ y;

    y = x ^ y;

    x = x ^ y;

    // 逆运算

    // 加法和减法互为逆运算,可以把加法减法替换为异或

    x = x + y;

    x = x - y;

    y = x - y;

 

    // 4. not运算(~

 

    //  针对无符号整型,直接把内存中的二进制数1全部取反

    int m = 10;

    printf("%d\n",~m);

 

    // 5. shl运算(<<

 

    // a shl b就表示把a转为二进制后左移b位(在后面添b0,例如4的二进制为0100,而10000转成十进制是164 shl 2 = 16

    int a = 4; int b = 2;

    printf("%d\n",a<<b);

    //  可以看出,a shl b的值实际上就是a乘以2b次方,因为在二进制数后添一个0就相当于该数乘以2

 

    // 6. shr运算(<<

 

    // a shr b就表示把a转为二进制后右移b位(在后面减b0

      int i = 16; int j = 2;

      printf("%d\n",i>>j);

    //  可以看出,a shr b的值实际上就是a除以2b次方

    // 优先级

  

// 1.1⃣️优先级: [], (), .(成员选择--对象), ->(成员选择--指针)

                // 相同级别时从左往右执行运算

// 2.2⃣️优先级: -(负号运算符), ++, --, *(指针运算符), &(取地址运算符), ~(按位取反运算符),!(逻辑非运算符), sizeof, (类型转换运算符)

                // 相同级别时从右往左执行运算

// 3.3⃣️优先级: *(乘), /(除), %(取余)

                // 相同级别时从左往右执行运算

  // 4.4⃣️优先级: +, -

                //相同级别时从左往右执行运算

    int c = 4; int d = 8;

    int s =sizeof!c * d;

    printf("%d\n",c+d*c);

    printf("%lu\n",sizeof(!c));

    printf("%d\n",s);

    

    

5.5⃣️优先级:  <<(左移), >>(右移)

              // 相同级别时从左往右执行运算

//    int c = 8; int d = 2;

//    int s =c<<(d+1);

//    int m =(c+d)<<1;

//    printf("%d\n",s);

//    printf("%d\n",m);

//    printf("%lu\n",sizeof c+d);


// 6.6⃣️优先级: >, >=, <, <=

                // 相同级别时从左往右执行运算

    int x = 6;int y =10;int z = 0;

     z = x > y + 4;

    printf("%d\n",z);

    z = x + 4 >= 2 + y ;

    printf("%d\n",z);

// 7.7⃣️优先级: ==, !=

                // 相同级别时从左往右执行运算

    int x = 6;int y =10;int z = 0;

   z = x + 4 >= !2*x + y==1 ;

   printf("%d\n",z);

// 8.8⃣️优先级: &(按位与)

                // 相同级别时从左往右执行运算

// 9.9⃣️优先级: ^(按位异或)

                // 相同级别时从左往右执行运算

// 10.

0 0
原创粉丝点击