美文网首页从汇编到C++
C语言6 运算符和表达式

C语言6 运算符和表达式

作者: Asura_Luo | 来源:发表于2018-05-04 02:46 被阅读0次

    C语言6 运算符和表达式

    运算符与表达式

    什么是运算符?什么是表达式?

    int x,y;
    x+y x-y  x>y x==y x=y
    

    表达式的结果

    (x+y)*(x-y)
    
    char => short => int => float => double
    /*如果x和 y类型 不同,最终结果按照上面结果类型转换*/
    

    表达式不论怎么复杂。最终只有一个结果

    不同类型运算结果类型证明的例子:

    void main()
    {
        char x =1;
        short y = 2;
        int z = x + y;
        return
    }
    

    对应汇编片段:

    mov byte ptr [ebp-4],1
    
    mov word ptr [ebp-8],offset main+20h(00401030)
    
    movsx eax,byte ptr [ebp-4]
    movsx ecx,word ptr [ebp-8]
    add  eax,ecx
    mov dword ptr [ebp-0Ch],eax
    

    运算符

    算术运算符

    +   -   *   /   %   ++  --
    加  减  乘  除  取余  自加 自减
    
    int i = 1;
    
    

    ++i 和 i++

    /*i++和++i的区别
    i++ 先运算再自加
    ++i 先自加再运算*/
    
    ++i;
    mov eax,dword ptr [ebp-4]
    add eax,1
    mov dword ptr [ebp-4],eax
    
    i++;
    mov eax,dword ptr [ebp-4]
    add eax,1
    mov dword ptr [ebp-4],eax
    
    这俩其实是一样的!!但是为啥有这个 前后的区别呢?
    往下看~~~
    
    printf("%d \n",i++);
    
    mov eax,dword ptr [ebp-4]
    mov dword ptr [ebp-8],eax
    mov ecx,dword ptr[ebp-8]
    push ecx
    push offset string "%d \n" (0042201c)
    mov edx,dword ptr [ebp-4]
    add edx,1
    mov dword ptr [ebp-4],edx
    call printf(00401070)
    
    所以i++
    就是先压入 i的值之后,才会 +1
    也就是先让函数使用i运算后,才会+1
    
    反之亦然 ++i 则是先+1 再运算
    

    关系运算符

    <   <=      >   >=  ==  !=
    关系运算符的值只能是0或1
    关系运算符的值为真时,结果值都为1
    关系运算符的值为假时,结果值都为0
    

    逻辑运算符

    !   %%  ||
    x>y && x<z  只有一个结果
    x>y || x<z  只有一个结果
    

    位运算符

    <<   >>   ~   |   ^    &
    左移 右移  非   或  异或  与
    

    赋值运算符:

    = 拓展赋值
    

    条件运算符

    ?:
    

    相关文章

      网友评论

        本文标题:C语言6 运算符和表达式

        本文链接:https://www.haomeiwen.com/subject/loyrrftx.html