zoukankan      html  css  js  c++  java
  • 运算符

    1.几个术语
    “左值”:指用于标志一个特定的数据对象的名字或表达式,例如变量。
    “右值”:指的是能赋给可修改的左值的量。
    “副作用”:对数据对象或文件的修改,如num=50。
     “一个顺序点”:是程序执行的一点,在该点处,所有的副作用都在进入下一步前被计算。
    注:语句里的分号,完整表达式的结束,都是一个顺序点。
     
    2.运算符++与--优先级仅次于()
     不能对 变量使用++,--的情况:
    <1>当一个变量出现在同一个函数的多个参数中时;<2>当一个变量多次出现在一个表达式里;<3>不能做宏函数的参数
    ey:printf("%10d,%10d",num,num*num++);       
    ans=num*2+num++;  
        原因:编译器不能保证先计算num*2或先计算num++。
     
    3.逗号运算符(多用在for中)
    该运算符有2个属性:被它分开的表达式按从左到右的次序进行计算(即逗号是个顺序点);
                                      整个逗号表达式的值是右边成员的值。
    ey: <1>  n++,m=n*3      第二个表达式使用的是更新后的n
         <2> x=(y=3,(z=++y+2)+5)    先把 y赋3,把y递增为4,y+2为6赋给z,z+5赋给x,x=11
         <3>int n,m;    n=200,300;  m=(n=200,300); 结果是n=200,m=300
     n=200,300;是个逗号表达式,值为300,n被赋值为200
          <4>char n,m;中逗号用作分隔符。
     
    4.关系运算符==:运算符==的优先级比=高,所以while(scanf("%d",&num)==1)
    while(canoes=5){}  如果写错将进入死循环且编译器无语法错误
    5=canoes;能检查出语法错误
    5==canoes;检查canoes的值是否为5
     
    5.逻辑运算符&& 与 ||
    C保证逻辑表达式是从左至右求值的,&&和||是序列的分界点,故在前进到下一个操作数之前,所有的副作用都会生效。
    并且,C保证一旦发现某个元素使表达式总体无效,求值将立刻停止。
    ey:while((c=getchar())!=' ' && c != ' ') //循环读入字符,直到出现空格和换行
           if(num != 0 && 12/num == 2)  //如果num=0,第一个表达式为假,就不在对关系表达式求值,避免计算机把0作除数。    
      
    6.条件运算符?:     
    形式: expression1 ? expression2 : expression3
    若expression1为真,表达式的值为expression2,否则为expression3。ey:(5>3) ? 1 : 2
     
    7.位逻辑运算符:不改变其本身的值
    #define BIT0 (0x1)   #define BIT1 (0x1 << 1)  ....
    <1>掩码MASK=BIT0 | BIT3 ...  掩码中的0看作不透明,1看作透明。
    <2>打开位flags |= MASK       MASK中1将flags中相应的位设为1
    <3>关闭位flags &= ~MASK   MASK中1将flags中相应的位设为0
    <4>转置位flags ^=  MASK     MASK中1将flags中相应的位取反
    <5>查看一位的值   a = flags & MASK
    <6>num<<n  并不改变num本身的值  num乘以2^n
     
    C运算符优先级
     
    注意:
    <1>sizeof运算符和size_t类型(C99)
    size_t是一个无符号整数类型,不是新类型。printf()说明符%z,%u,%lu
    sizeof返回size_t类型的值。
    <2>%取模运算符:13%5:对13除以5取模
    <3>每一个表达式都有一个值:6+(c=3+8) 的值为17
    <4>.完整的表达式(full exspression):while循环判断的条件是一个完整的表达式;
    ans=num*2+num++中num*2和num++都不是完整是表达式。
  • 相关阅读:
    347. 前 K 个高频元素(桶排序、堆排序)
    322. 零钱兑换 && 416. 分割等和子集(0-1背包问题)
    739. 每日温度 && 503. 下一个更大元素 II (单调栈)
    1110. 删点成林
    个人纪录
    pub get failed (server unavailable) -- attempting retry 1 in 1 second?
    python 遍历文件夹重命名
    flutter vscode 连接iphone失败
    部署以太坊合约
    Web漏洞扫描工具AppScan10介绍
  • 原文地址:https://www.cnblogs.com/zhoutian220/p/4007192.html
Copyright © 2011-2022 走看看