我是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
答案 0 :(得分:2)
由于您没有指定您不熟悉哪些操作符,因此我将对其中一些操作符进行常规操作,并将您链接到您可以在自己的时间阅读的一些资源。有logical operators和bitwise operators的组合。如:
&&
表示逻辑运算符AND。||
表示逻辑运算符OR。~
表示按位运算符,不是。!
表示逻辑运算符,NOT。&
表示按位运算符,AND。|
表示按位运算符,OR。^
表示按位运算符,XOR。==
表示逻辑运算符,相等。=
表示赋值运算符。...你可以在我链接的两个页面上找到的其余部分,并从逻辑上推断出他们的结果。
答案 1 :(得分:1)
如果用奇怪的符号表示||,&amp;&amp;,|和&amp;符号然后这些是逻辑和按位运算符。
printf("%d\n", i || j && k);
会像这样评价:
首先j&amp;&amp; k被评估:它是逻辑AND运算符。如果这两个值都不为零,则结果为1.(如果其中任何一个为零,那么结果将为零。)
然后通过逻辑OR运算符||将此结果与i进行“或”运算。这意味着如果左手和右手操作符中的任何一个非零,则结果为1.这是结果。
代码: printf(“%d \ n”,i | j&amp; k);
此代码用于按位运算。
i,j和k的二进制表示可以写成:
i = 23 = 00010111
j = 13 = 00001101
k = 11 = 00001011
现在第一个j&amp; k被评估:您可以对所有位应用按位AND运算。 结果将是:00001001
然后,这次也是i
的值,也是按位。结果将是:
00001001
00010111
= 00011111 = 31
您可以为其他运营商应用类似的逻辑。您可以在该语言的所有基本教科书中找到有关这些运算符的更多信息。