-5

我是 c 新手,到目前为止,我主要处理的是使用循环编写代码,但我遇到了这个问题,其中包含一些我以前从未见过的符号。您能解释一下为什么在我编译和运行时会显示这些数字吗?

#include <stdio.h>
int main () {

int i = 23, j = 13, k = 11, m;
printf("%d\n", i || j && k);
printf("%d\n", i | j & k);
m = i == j && k;
printf("%d %d\n", m, -!m < 0);
m = i ^ (j=13);
printf("%d %d\n", m, j);
j = 7;
m = 7;
m = i & ~(j==7);
printf("%d\n", m);
m = ~(~k | k);
printf("%d\n", m);

}

我得到:

1 - 31 - 0 1 - 26 13 - 22 - 0

4

2 回答 2

2

由于您没有指定您不熟悉哪些运算符,因此我将简要介绍其中的一些运算符,并将您链接到一些您可以在自己的时间阅读的资源。有逻辑运算符位运算符的组合。如:

  1. &&表示逻辑运算符 AND。
  2. ||表示逻辑运算符 OR。
  3. ~暗示按位运算符,NOT。
  4. !暗示逻辑运算符,NOT。
  5. &意味着按位运算符 AND。
  6. |表示按位运算符 OR。
  7. ^表示按位运算符 XOR。
  8. ==意味着逻辑运算符,相等。
  9. =隐含赋值运算符。
  10. ... ETC。

...其余的您可以在我链接的两个页面上找到,并从那里逻辑地推断出它们的结果。

于 2013-08-14T10:38:18.710 回答
1

如果你用奇怪的符号表示 ||, &&, | 和 & 符号然后这些是逻辑和按位运算符。

printf("%d\n", i || j && k);

将像这样评估:

首先评估 j && k:它是逻辑 AND 运算符。如果这两个值都不为零,则结果为 1。(如果其中任何一个为零,则结果将为零。)

然后通过逻辑 OR 运算符 || 将此结果与 i 进行“或”运算。这意味着如果左右手运算符中的任何一个不为零,则结果为 1。这就是这里的结果。

代码:printf("%d\n", i | j & k);

此代码用于按位运算。

i、j 和 k 的二进制表示可以写为:

i = 23 = 00010111
j = 13 = 00001101
k = 11 = 00001011

现在首先评估 j & k:您可以对所有位应用按位与运算。结果将是:00001001

然后这与i这个时间的值也按位进行或运算。所以结果将是:

  00001001
  00010111
= 00011111 = 31

您可以对其他运算符应用类似的逻辑。您可以在该语言的所有基本教科书中找到有关这些运算符的更多信息。

于 2013-08-14T10:53:20.420 回答