操作符

本文详细介绍了C语言中的各类运算符,包括算术运算符、移位运算符、位运算符、赋值运算符等,并通过示例代码展示了它们的应用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.算术操作符(+、-、*、/、%)

注意:1.这些操作符都为双目操作符,拥有左操作数和右操作数。

             eg:int a = 1(左操作数) + 2(右操作数);

           2.对于/,若两个操作数为整数执行整数除法;若有一个操作数为浮点数执行浮点数除法。

           3.对于%,只能对整数取模,返回的是整除后的余数。

              eg: 9.0%3.0 是错误的。 

二.移位操作符(<<、>>)

注意:1.<<(左移操作符):<<1:将二进制左边丢一位,右边补0(左移一位有*2的效果)

           2.>> (右移操作符):①算术右移>>1:将二进制右边丢一位,左边补原该值的符合位

                                             ②逻辑右移>>1:将二进制右边丢一位,左边补0 (右移一位有/2的效果)


三、位操作符(&、|、^)

注意:他们的操作数必须是整数。(按位与、或、异或)

eg:不能创建临时变量(第三个变量),实现两个数的交换。

     #include<stdio.h>

     int main()

  {

     int num1 = 3;    //011                                                  

     int num2 = 5;    //101

     num1 = num1^num2;   //110                                     异或(对应二进制为相同为0;相异为1)

     num2 = num1^num2;   //011                                     数字在内存中存的是补码,拿补码与,或,异或

     num1 = num1^num2;   //101

     printf(“num1 = %d,num2 = %d”,num1,num2);

     return 0;

}

四、赋值操作符(=)

复合赋值符

+=    eg: a = a +10;      -=      *=      /=      %=      >>=      <<=   eg: a = a<<1;      &=      |=      ^=   

               a += 10;                                                                                 a <<= 1;

五、单目操作符

(逻辑反操作)   

(负值)     

+(正值)    

&(取地址)   

sizeof(操作数的类型长度<以字节为单位>   

int  (2/4个字节)

short(2个字节) 

long  (4个字节)

long long  (8个字节)

char  (1个字节)

float   (4个字节)              有效数字:6

double  (8个字节)                            15

long double  (8/16个字节)              15/19

指针类型大小为4/8个字节

前言:①#include<stdio.h>

                  int main()

               {

                 int arr[1] = {0};            区别:                                     运行结果:

                 printf("%p\n",arr);       数组首元素地址                      //001DFAA4

                 printf("%p\n",arr[0]);   数组首元素地址                      //001DFAA4

                 printf(%p\n",&arr);      取数组地址                            //001DFAA4

                 return 0;

               }  

                ②#include<stdio.h>

                   int main()

                   {                 

                      int arr[10]={0};                        区别:                                                                  运行结果:

                      printf("d\n",sizeof(arr));     计算的是数组总大小,单位是字节                          //40

                      printf("d\n",sizeof(arr+0));     计算的是数组中第一个元素的大小,单位是字节      //4

                      return 0;

                   }

               结论:⑴数组名单独放在sizeof内——数组总大小

                         ⑵&数组名——取数组地址

                         除此之外数组名都是数组首元素地址

eg:①#include<stdio.h>

     int main()

     {

         int a = 10;                                       运行结果:

         printf("%d\n",sizeof(a));                  //4

         printf("%d\n",sizeof(int));                //4

         printf("%d\n",sizeof a);                    //4

         printf("%d\n",sizeof int);                 错误

         return 0;

      }

②   #include<stdio.h>

       int main()

      {     

          int a = 10;

          short s = 2;                                                                                     运行结果:

          printf("%d\n",sizeof(s = a + 3));    不运算的s的类型占2个字节         //2

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

          return 0;

        }

      

~   (对一个数的二进制位按位取反)

eg:#include<stdio.h>

     int main() 

     {

          int a = 0;                               //000                 0

          printf("%d/n",~a);            //111——101   -1

          return 0;

      }   

注意:要将一个数的第n位0改为1,可或上1左移n-1位的数

          要将一个数的第n位1改为0,可与上1左移n-1位后在按位取反的数 

--   (前置、后置--)   

++  (前置、后置++)

eg:#include<stdio.h>

        int main()

       {

            int a = 10;

            int b = a++;    后置++:先使用,后++                        int b = ++a;   前置++:先++,后使用

            printf("%d\n",b);           //10                                        printf("%d\n",b);          //11

            printf("%d\n",a);           //11                                         printf("%d\n",a);         //11

            return 0;

       }

 *   (间接访问操作符<解引用操作符>)   

(类型)   (强制类型转换)

eg:  (double)a   (将a转换成double类型)

     (int)(x+y)    (将x+y的值转换成int型)

       (float)(5%3) (将5%3的值转换成float型)

形式:(类型名)(表达式)

六、关系操作符 (字符串不可拿这个比)

>

>=

<

<=

!=

==

七、逻辑操作符

&&             逻辑与<两个同时为真为真>

||                逻辑或<两个同时为假为假>

eg*

①#include<stdio.h>

    int main()

    {

       int i = 0,a = 0,b = 2,c = 3,d = 4;

       i = a++&&++b&&d++;    只有a++执行了

       printf("a = %d\nb = %d\nc = %d\nd = %d\n",a,b,c,d);                     //1234

    }

#include<stdio.h>

    int main()

    {

        int i = 0,a = 1,b = 2,c = 3,d = 4;

         i = a++&&++b&&d++;  a++、++b、d++三个都执行了

         printf("a = %d\nb = %d\nc = %d\nd = %d\n",a,b,c,d);                   //2335

     }

七、条件操作符

exp1 ? exp2 : exp3

eg: 1.if (a>5)                        换为条件操作符①(a>5)? b = 3 : b = -3;   

         b = 3;                                                  ② b = (a>5) ? 3 : -3;             更好

         else

         b = -3;

       2.用条件表达式实现找两个数中较大值

       int a = 10;

       int b = 5;

       Max =(a>b)?a:b;

八、逗号表达式

exp1,exp2,exp3,.........expN                            从左向右依次执行,整个表达式的结果是最后一个表达式的结果

九、下标引用、函数调用和结构成员

1.[ ]          两个操作数

2.( )          一个或者多个操作数     一个为函数名,剩余的操作数就是传递给函数的参数

eg:①

     #include<stdio.h>

     int Add(int x,int y) 

     {   

        return x+y;

     }

     int main()

      {

         int a = 10;

         int b = 20;

         Add (a,b);

         return 0;

       } 


       #include<stdio.h>

       void Swap(int *px,int *py)

       {

         int tmp = 0;

         tmp = *px;

          *px = *py;

          *py = tmp;

         }

        int main( )

        {

           int x = 0;

           int y = 0;

           Swap(&x,&y);

           printf("x = %dy=%d\n",x,y);

           return 0;

          }

3.访问一个结构的成员

①结构体.成员名

②结构体指针——>成员名

运算符优先级:

!  >  算术运算符 > 关系运算符 > 逻辑运算符 > 条件运算符 ?: > 赋值运算符 > 逗号运算符,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值