非常基本,如果在C中起作用

时间:2016-12-15 18:38:35

标签: c function if-statement

我是一名学生,我明天要参加考试,需要有人来解释一下这个" a || b"和" a&& b"如果函数实际意味着内部。

以下是我的意思的一个例子:

a = 0,b = 1,c = 0

A)

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

解决方案:c = 3

b)中

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

解决方案:c = 1

我不明白|| b和&& b是什么意思。我把它看作是一个OR b和一个AND b,但这究竟意味着什么?

5 个答案:

答案 0 :(得分:6)

这些是您遇到这两个问题的起始值: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

答案 1 :(得分:1)

如果第一个上的OR b不为零,则第二个上的AND b不为零。

答案 2 :(得分:1)

是的,这正是它的含义。 ' a OR b'和'和b'

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

答案 3 :(得分:1)

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,在比较中是假的。所以只有c ++;将评估该行,并将其后增量设为1

答案 4 :(得分:1)

你实际上是正确的,|| b只是意味着"或者b"并且&& b表示" a AND b"。但这两个问题的真正意义仅在于测试你的知识:

  1. 什么是真的,什么是C
  2. 的错误
  3. OR和AND做什么
  4. ++前缀和++ postfix之间的区别
  5. 第一个问题是if的计算结果为true,因为a为假(= 0)且b为真(= 1 - 实际上任何非零值为真),使得|| b = true 。这就是为什么c = 3,因为语句c = ++ b被执行了。此外,++ b实际上返回2,因为前缀++意味着首先递增,然后将其新值返回到表达式的其余部分(在这种情况下赋值给c)。然而,postfix ++意味着首先在递增之前将操作数的值返回给表达式。

    另一方面,第二个问题显示的是if的计算结果为false,因为a为假(= 0)且b为真(= 1 - 实际上任何非零值为真),这样a& ;& b = false。这就是为什么c = 1,因为语句c = ++ b没有执行,后面的c ++会将c从0初始值增加到1。