echo000 发表于 2017-12-18 15:49:38

&&的问题

#include<stdio.h>

int main(){

int a=1,b=2,m=0,n=0,k;

n=b>a;

    k=n&&(m=1);   

    printf("%d,%d\n",k,m);

}

这个的结果是1,1
但如果改成这样
#include<stdio.h>

int main(){

int a=1,b=2,m=0,n=0,k;

n=b>a;

    k=n&&(m=0);   

    printf("%d,%d\n",k,m);

}

结果就是0,0
为什么k的值也是0呢?

BngThea 发表于 2017-12-18 15:57:45

因为 && 逻辑运算结果是0啊
k = n && (m=0)
右边将 0 赋值给了 m,同时返回0

人造人 发表于 2017-12-18 16:03:07

#include <stdio.h>

int main(void)
{

        int a = 1, b = 2, m = 0, n = 0, k;

        n = b > a;

        k = n && (m = 0);

        printf("%d,%d\n", k, m);

        return 0;
}


相当于

#include <stdio.h>

int main(void)
{

        int a = 1, b = 2, m = 0, n = 0, k;

        n = b > a;

        k = (   n && (m = 0)   );

        printf("%d,%d\n", k, m);

        return 0;
}


人造人 发表于 2017-12-18 16:05:26

本帖最后由 人造人 于 2017-12-18 16:06 编辑

        k = n && (m = 0);
00007FF646F85821cmp         dword ptr ,0
00007FF646F85825je          main+80h (07FF646F85840h)
00007FF646F85827mov         dword ptr ,0
00007FF646F8582Ecmp         dword ptr ,0
00007FF646F85832je          main+80h (07FF646F85840h)
00007FF646F85834mov         dword ptr ,1
00007FF646F8583Ejmp         main+8Ah (07FF646F8584Ah)
00007FF646F85840mov         dword ptr ,0
00007FF646F8584Amov         eax,dword ptr
00007FF646F85850mov         dword ptr ,eax

人造人 发表于 2017-12-18 16:07:52

为什么复制后就无法对齐

像番茄加两个蛋 发表于 2017-12-18 18:20:31

&&就是我们说的并且

大西北 发表于 2017-12-20 21:33:36

最后那个k=n&&(m=0)=n&&0=1&&0=0
页: [1]
查看完整版本: &&的问题