c语言操作符

:#@TOC

C语言操作符小结

通过老师的讲解还有我自己对这一部分的理解,我对这一部分做如下总结:

1.操作符分类

 .算术操作符
 .移位操作符
 .位操作符
 .赋值操作符
 .单目操作符
 .关系操作符
 .逻辑操作符
 .条件操作符
 .逗号操作符 
 .下标引用,函数调用和结构成员

2.具体介绍

 .算术操作符:+  -  *  /
     除了%操作符之外,其他的几个可以用于证书和浮点数。
     对于 /  操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行就是浮点数除法。
     % 操作符的两个操作数必须为整数,返回的是整除之后的余数。

 .移位操作符:
      <<  左移操作符       >> 右移操作符
      左移操作符移位规则:
         1.>  逻辑移位:左边抛弃,右边补0。
         注意:整数左移一位有乘 2 的效果,左移两位乘4。
              int num = 10;
              00000000000000000000000000001010   //num在内存中的二进制
              00000000000000000000000000010100  //num左移一位产生生的结果
              num <<                          //但实际上num在没被赋值的情况下,自身的值不会变化 int num = 10;
              00000000000000000000000000001010   //num在内存中的二进制
              00000000000000000000000000010100  //num左移一位产生生的结果
              num <<                          //但实际上num在没被赋值的情况下,自身的值不会变化
     右移操作符的移位规则 :
         1.>  逻辑移位: 左边用0填充,右边丢弃。
         2.>  算术移位:  左边用该值得符号位填充。
         注意:右移一位有除二的效果;负数的符号位为1。
         例如:  求一个整数存储在内存中的二进制中1的个数。
#include<stdlib.h>
#include<stdlib.h>
int main()
{
    int num = 0; 
    printf("请输入一个整数:\n");
    scanf("%d",&num);
    int  i =  0;
    int count = 0; //计数
    while(num)//num只要不为0,就最少有一个1
    {
       count++;
       num = num & (num-1); // 把num中的1变为0
    }
    printf("二进制中1的个数: %d", count);
	system("pause");
	return 0;
}
        警告 :  对于移位运算符,不要移动负数位,这个是标准未定义的。

   .位操作符:
    & :  按位与,有0为0,全1为1。 
     | :  按位或,有1为1,全0为0。
    ^ :按位异或,相异为1,相同为0。
    注意: 他们的操作数全为整数,都是对二进制数进行运算。
    例如:不能创建临时变量(第三个变量),实现两个数交换。  
     #include<stdio.h>
     #include<stdlib.h>
     int main() 
     {
           int a = 10;
           int b = 20;
           a = a ^ b;
           b = a ^ b;
           a = a ^ b;
           printf(" a=    %d     b=    %d\n", a,b);
          system("pause");
          return 0;
     }            

   .赋值操作符: 
       可以给自己重新赋值,也可以连续使用
    复合赋值符:
               +=   ,   -=   
               *=   ,   /=
               %=   ,  >>=
               <<=  ,  &=
               |=   ,  ^=
     这些运算符都可以写成复合的效果,让代码更加简洁。

   .单目操作符:
               !   逻辑反操作
               -   负值
               +   正值
               &   取地址
          sizeof   操作数的类型长度(以字节为单位),既可以求变量,也可以求类型的大小。
               ~   对一个数的二进制按位取反  
           --前置  先减减,再使用      
           后置--  先使用,后减减
           ++前置  同上
           后置++  同上
                *  间接访问操作符(解引用操作符)
          (类型)  强制类型转换
     int a  =  (int)  3.14

        .关系操作符:
                   >
                  >=        
                   <
                  <=
                  !=
                  ==

         .逻辑操作符:
                  &&-----逻辑与,表达式为假不继续算
                  ||-----逻辑或,表达式为真不继续算                      

         .条件操作符:
                  exp1  ?  exp2  :  exp3
                   if(a>5)
                   {
                         b  =  3;
                   }                
                   else
                   {
                       b    =  -3;
                   }                         
          //转换成条件表达式为:  a  >  5  ?  3  :  -3;

       经典例题 :
                int i = 0 , a = 0 , b = 2 , c = 3 , d =  4 ;
                i = a ++&&++b&&d++;
                // i = a +=||++b||d++;
                printf("%d %d %d %d" , a ,b,c,d);
        //第一个表达式的结果为1 2 3 4;第二个表达式的输出为:1  3  3  4 。

    .逗号表达式:
               exp1 , exp2 , exp3 , ... ,expn
             1.定义:用逗号隔开表达式
             2.结果:从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
              int a = 1;
              int b = 2;
              int c = (a > b , a = b + 10 , a , b = a + 1);  // c = 13

      .下标引用,函数调用和结构成员
        1.[]:操作数为一个数组名 + 一个索引值。
        2.():函数调用操作符,接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
        3.访问一个结构的成员,分为两类: 结构体.成员名;结构体指针->成员名
                 struct  stu  
                 {
                       char name[10];
                       int age;
                       char id[12];
                 };

       这只是定义了一个结构体,不会向内存申请空间。
                 struct  stu  s;
                 struct  stu  *p = &s;
                 strcpy((*p).name,"张三");
                 strcpy((*p).id,"201606060501");
                 *p.age = 18;                                    

     指针还有另外一种简洁的方式
               strcpy(p->name,"张三");
               strcpy(p->id,"201606060501");
               p->age = 18;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值