林小某 发表于 2021-2-20 15:43:01

逻辑运算

#include <stdio.h>

int main()
{
      int a = 3, b = 3;

      (a = 2) && (b = 5);
      printf("a = %d, b = %d\n", a, b);

      (a = 1) || (b = 5);
      printf("a = %d, b = %d\n", a, b);

      return 0;
}

为什么这样输出是
a=2,b=5
a=2,b=5

不应该是第一个先进行判断吗(a=2)不成立,所以不应该保留a=3吗,
如果仅仅是进行赋值的话,那刚开始定义a=3,b=3又有什么用呢

昨非 发表于 2021-2-20 15:43:02

林小某 发表于 2021-2-20 17:03
那这样的话,最开始给ab赋值有什么意义呢
直接int a, b;
不可以吗

可以啊,
这题目的目的不就是迷惑你
助你理解的吗?
先像一个初值,然后用一堆花里胡哨的语句变换,最后看你理解不理解的了{:10_277:}

李京 发表于 2021-2-20 15:45:46

a=2是赋值,不是判断
==才是判断

昨非 发表于 2021-2-20 15:52:08

两点:
第一、赋值语句的值就是所赋的值
第二、逻辑语句短路原则:A&&B,当A为false时,后面的B不执行
C||D,当C为true时,后面的D不执行

水上漂飞飞飞 发表于 2021-2-20 16:13:10

=是赋值的意思,你直接把a赋值为了2,把b赋值为了5

林小某 发表于 2021-2-20 17:03:56

昨非 发表于 2021-2-20 15:52
两点:
第一、赋值语句的值就是所赋的值
第二、逻辑语句短路原则:A&&B,当A为false时,后面的B不执行


那这样的话,最开始给ab赋值有什么意义呢
直接int a, b;
不可以吗

林小某 发表于 2021-2-20 17:04:27

李京 发表于 2021-2-20 15:45
a=2是赋值,不是判断
==才是判断

那刚开始的赋值有什么用

昨非 发表于 2021-2-20 17:06:17

林小某 发表于 2021-2-20 17:04
那刚开始的赋值有什么用

赋值啊
页: [1]
查看完整版本: 逻辑运算