zoukankan      html  css  js  c++  java
  • 符号(位运算符,++,--,优先级和类型转换)

    位运算符:&,|,^,<<,>>,~

    都是基于二进制数的移动,其他进制都要转换成二进制进行

    左移n位,相当于乘以2的n次方;右移n位,相当于除以2的n次方。

    ^:a^a=0,遵行交换律,结合律  a^b^a=a^a^b=b:如果a的个数为偶数,那么计算结果永远是b

    ++,--与逗号表达式的运算:

    1 int x=3;
    2 int y=(++x,x++,x+10);

    逗号表达式的运算:从左到右,依次计算每个表达式的值,最后一个表达式的值就是逗号表达式的值

    1 int i=3;
    2 i+++i+++i++;

    贪心法:
    编译器处理的每一个字符应该尽可能多的包含字符,编译器从左到右的顺序一个一个尽可能多的读入字符,即当读入的字符不能和已经读入的字符组合合法为止。

    所以上式的处理方式:(i++)+(i++)+(i++)

    1 int i=1;
    2 ++i+++i+++i++;

    处理方式:(++i++)+(i++)+(i++)
    ++i++,++i=2,2++,是个错误的表达式,所以上式编译不能通过。

    优先级+类型转换:

    *p.f==>*(p.f)

    int *ap[]==>int *(ap[])

    int *fp()==> int *(fp())

    ==和!=优先级高于位操作符:val & mask !=0 -->val & (mask !=0)

    ==和!=优先级高于赋值运算符:val =getchar() !=EOF -->val = (getchar() !=EOF)

    算术运算符高于位移运算符:msk<<4+sg-->msk<<(4+sg)

    逗号运算优先级最低:a=1,2-->(a=1),2

    c语言隐式类型转换:(先转换再执行相应的运算操作)

    算术运算式中,低类型转换为高类型 (char,short-->int)

    赋值表达式中,表达式的值转换为左边变量的类型

    函数调用时,实参转换为形参类型

    函数返回时,return表达式转换为返回值类型。

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int i = -2;
     5     unsigned int j = 1; 
     6     if( (i + j) >= 0 ) //i先转换为unsigned int类型,注意负数的存储
     7     {
     8         printf("i+j>=0
    ");   // i+j>=0 
     9     }
    10     else
    11     {
    12         printf("i+j<0
    ");
    13     }
    14     printf("i+j=%d
    ", i + j);  // -1,%d表示有符合的整型
    15     return 0;
    16 }
    内在的趣味,表面的繁琐
  • 相关阅读:
    问题python3中的tablib库报错“'Dataset' object has no attribute 'xlsx' tablib”
    下载并运行 Jenkins
    mac上卸载jdk
    Macbook pro 切换显卡
    Mac 安装和使用MongoDB
    PEP8 规范
    完全卸载Xcode
    mysql重置密码
    安装vue mac 不成功
    error:Cannot pull with rebase
  • 原文地址:https://www.cnblogs.com/data1213/p/4821880.html
Copyright © 2011-2022 走看看