【问题标题】:C - Weird symbols [closed]C - 奇怪的符号
【发布时间】:2013-08-16 06:27:15
【问题描述】:

我是 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

【问题讨论】:

  • 这个问题并不具有建设性。没有办法说出您不熟悉哪些符号。你能缩小范围并使其更具体吗?
  • 第一个printf,为什么会出现1?二、为什么31出来,没见过只有一个 | 天天要闻和&,通常他们是两个一组。三、“m = i == j && k;”这是如何工作的,什么是'-!m

标签: c bitwise-operators symbols logical-operators


【解决方案1】:

由于您没有具体说明您不熟悉哪些运算符,我将简要介绍其中的一些运算符,并将您链接到一些您可以在自己的时间阅读的资源。有logical operatorsbitwise operators 的组合。如:

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

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

【讨论】:

  • 你忘了^,按位异或
  • @typ1232,为了完整起见,我将添加它。我确实说过这里列出了 一些 运算符。
【解决方案2】:

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

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

会这样评估:

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

然后这个结果通过逻辑或运算符 || 与 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-14
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多