运算符

  • 自增[or自减]

    —— 为了使得代码更精炼,且自增的运行速度更快

    ——但是在编程时,应当屏蔽前后自增的差别

    ——由于前后自增只在赋值时存在差别,循环中的i++和i++是一致的

    • 分类

      • 前自增 —— ++i
      • 后自增 —— i++
    • 异同

      • 同:最终都使i的值加一
      • 异: 在赋值时
        前自增整体表达式的值是i+1后的值
        后自增整体表达式的值式i+1前的值
        #include<stdio.h>
        
        int main()
        {
            int i,j = 0;
            int m,n;
            m = i++;//后自增,i+1之前的值 0 
            n = ++j;//前自增,j+1之后的值 1 
            printf("m:%d\nn:%d\n",m,n);
            for(i = 0;i<5;i++)
            {
                printf("我是输出,应该有5次\n");
            }
            for(i = 0;i<5;++i)
            {
                printf("我是输出,也应该有5次\n");
            }
            return 0;
        }
        

        image-20200531163618658

三目运算符

  • A?B:C

    #include<stdio.h>
    
    int main()
    {
    	int m,n,i;
    	printf("请输入m:");
    	scanf("%d",|m);
    	printf("请输入n:");
    	scanf("%d",&n);
        (m>n)?i=m:i=n;
        /*
        等价于:if(m>n)
    				i = m;
    			else
    				i = n; 
    	*/
        printf("大的数为:%d",i);
        
        return 0;
    }
    

    image-20200531164623926

逗号表达式

  • (A,B,C,D)

  • 功能从左到右执行,最终表达式的值是最后一项的值

    #include<stdio.h>
    
    int main()
    {
    	int i,j,m,n;
    	int r;
    	r = (i = 1,j = 2,m = 3,n = 4);
    	printf("i:%d j:%d m:%d n:%d r:%d\n",i,j,m,n,r);
        
        return 0;
    }
    

    image-20200531165146809

位运算符

—— 对位进行操作

  • & —— 按位与

    • 1&1 = 1;1&0 = 0;0&1 = 0;0&0 = 0
    • 例子
      /*
      5&7			5&1			4&10
      
      0101		0101		0100
      &			&			&
      0111		0001		1010
      =			=			=
      0101		0001		0000
      */
      #include<stdio.h>
      int main()
      {
      	printf("%d\n",5&7);
      	printf("%d\n",5&1);
      	printf("%d\n",4&10);
          
          return 0;
      }
      

      image-20200531170636147

  • |—— 按位或

    • 1|1 = 1;1|0 = 1;0|1 = 1;0|0 = 0
    • 例子
      /*
      5|7			5|1			4|10
      
      0101		0101		0100
      |			|			|
      0111		0001		1010
      =			=			=
      0111		0101		1110
      */
      #include<stdio.h>
      int main()
      {
      	printf("%d\n",5|7);
      	printf("%d\n",5|1);
      	printf("%d\n",4|10);
          
          return 0;
      }
      

      image-20200531171311353

  • ~ —— 按位取反

    • ~i 将i变量的所有二进制取反

      /*
      ~1
      0.....01
      1.....10	OXFFFFFFFE	
      */
      #include<stdio.h>
      
      int main()
      {	
      	int i = 0XFFFFFFFE;//将1按位取反后写成16进制为FFFFFFFE
      	printf("i:%d\n",i);//以十进制输出
          printf("~1%d",~1);//直接输出~1 
          return 0;
      }
      

      image-20200531172820002

  • ^—— 按位异或

    • 相同为0,不同为1
      /*
      5^7			5^1			4^10
      
      0101		0101		0100
      ^			^			^
      0111		0001		1010
      =			=			=
      0010		0100		1110
      */
      #include<stdio.h>
      int main()
      {
      	printf("%d\n",5^7);
      	printf("%d\n",5^1);
      	printf("%d\n",4^10);
          
          return 0;
      }
      

      image-20200531173820909

  • << —— 按位左移

    • i<<2 相当于将i的所有二进制位左移2位,右边补0
    • 在数据不丢失的情况下,左移n位 = 乘以2的n次方
      /*
      7<<2
      0.....0111
      0....11100
      28 也等于 7*2的平方
      但是
      7<<2比7*4执行速度快
      */
      #include<stdio.h>
      int main()
      {
      	printf("%d\n",7<<2);    
          return 0;
      }
      
  • >> ——按位右移

    • i>>2 相当于将i的所有二进制位y右移2位,左边补0(或1)
    • 在数据不丢失的情况下,左移n位 = 除以2的n次方
      /*
      8>>2
      0.....1000
      0.......10
      2 也等于 8/2的平方
      但是
      8>>2比8/4执行速度快
      */
      #include<stdio.h>
      int main()
      {
      	printf("%d\n",8>>2);    
          return 0;
      }
      

      image-20200531204348021

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值