【问题标题】:Very basic, if function in C [closed]非常基本,如果 C 中的函数 [关闭]
【发布时间】:2017-05-01 11:13:16
【问题描述】:

我是学生,明天要考试,需要有人解释一下 if 函数里面的“a||b”和“a&&b”到底是什么意思。

这是我的意思的一个例子:

a=0 , b=1 , c=0

一)

if(a||b)
  c=++b;
c++;

解决方案:c=3

b)

if(a&&b)
  c=++b;
c++;

解决方案:c=1

我不明白 a||b 和 a&&b 的问题是什么意思。我认为它只是 a OR b 和 a AND b ,但这到底是什么意思?

【问题讨论】:

  • 如果您在 C 语言中进行测试并且您不知道“和”和“或”是什么意思,那么您就有一个大问题。检查anywhere
  • if 不是函数。你应该解雇你的教授。
  • 如果你不知道这个!!你的未来在明天的考试中很暗淡,特别是如果包含指针、链接列表和结构……我建议你认真学习。祝你好运
  • 每个人都是以某种方式开始的,对吧?并且它不像 C 有一个完美的布尔概念。
  • @manonthemat 在考试前一天开始?来吧...

标签: c function if-statement


【解决方案1】:

实际上,a||b 的意思是“a OR b”,而 a&&b 的意思是“a AND b”。但这两个问题的真正意义只是测试您对以下方面的了解:

  1. C 中什么是真,什么是假
  2. OR 和 AND 的作用
  3. ++前缀和++后缀的区别

第一个问题显示的是 if 计算结果为 true 因为 a 为 false ( = 0 ) 而 b 为 true ( = 1 - 事实上任何非零值都是 true ) 使得 a||b = true .这就是 c=3 的原因,因为执行了语句 c=++b。此外,++b 实际上返回 2,因为前缀 ++ 意味着首先递增,然后将其新值返回给表达式的其余部分(在这种情况下赋值给 c)。而后缀 ++ 意味着首先将操作数的值返回给表达式,然后再递增它。

另一方面,第二个问题显示的是 if 评估为 false 因为 a 为 false ( = 0 ) 且 b 为 true ( = 1 - 实际上任何非零值都是 true ) 使得 a&&b =假。这就是为什么 c=1 的原因,因为语句 c=++b 没有被执行,后面的 c++ 会将 c 从初始值 0 增加到 1。

【讨论】:

    【解决方案2】:

    1)

    if(a||b)
      c=++b;
    c++;
    

    从 0 || 1 将评估为真,因为其中一个在 OR 比较中为真。所以会有一个 b 的预增量,它的值将被分配给 c。因此 c 将是 2 并且在它 c 再次递增之后它将变为 3

    2)

    if(a&&b)
      c=++b;
    c++;
    

    比较将是错误的,因为 a 是 0,在 and 比较中是错误的。所以只有c++;行将被评估,并将后增量为 1

    【讨论】:

      【解决方案3】:

      这两个问题的起始值是:a=0 , b=1 , c=0

      两个问题的问题都是:“变量c的值是多少”


      我们来看第一个问题:

      if(a||b) // if a or b is true (meaning in this case not 0)
        c=++b; // then increment the value of b (was 1, now 2) and assign the value to c
      c++; // increment c's value again (was 2, now 3)
      

      因此,解决方案是 3。


      第二个问题

      if(a&&b) // if a is true (shortcutting here, because a is 0, which is false)
        c=++b; // we don't get to this part
      c++; // increment c (which was 0, now 1)
      

      解是1

      【讨论】:

      • 非常感谢,我所需要的!
      • 太好了,如果这解决了问题,请点赞并接受它作为最佳答案。
      【解决方案4】:

      是的,就是这个意思。 “a OR b”和“a AND b”

      由于 a 为 0 且 b 为 1,它们的 OR 结果为 1(在第一个 if 条件中),因此您执行语句“c=++b”。 它们的 AND 结果为零,因此您不执行语句 'c=++b'

      【讨论】:

      • 1 || 0 不是 1 ,它是 true
      • 嗯,在 C 和大多数其他语言中,1 表示真,0 表示假。
      • 不,在 C 中,零值被视为假,非零值被视为真。所以你同样可以说 0||1 是 42(它也不是)。您的措辞使它看起来像 0||1 与 0|1
      【解决方案5】:

      如果a OR b 在第一个不为零,如果a AND b 在第二个不为零。

      【讨论】:

      • 在c中,我们没有直接的布尔类型。我们使用整数来做到这一点。 1 表示真,0 表示假。
      • 0 为假任何非零为真
      • C99 引入了 _Bool 和 stdbool.h 的使用,因此我们确实有引入布尔类型的宏......即使它们“减少”为 1 表示真,0 表示假。见stackoverflow.com/questions/4767923/c99-boolean-data-type
      猜你喜欢
      • 2021-08-16
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多