C ==符号是什么意思?

C ==符号是什么意思?,c,syntax,operators,C,Syntax,Operators,我想弄明白==符号在这个程序中是什么意思 int main() { int x = 2, y = 6, z = 6; x = y == z; printf("%d", x); } 平等。如果操作数相等,则返回1,否则返回0。它是“等于”运算符 在上面的示例中,x被分配了等式测试(y==z)表达式的结果。因此,如果y等于z,x将设置为1(真),否则0(假)。由于C(C99之前版本)没有布尔类型,因此表达式的计算结果为整数。运算符测试是否相等。例如: if

我想弄明白==符号在这个程序中是什么意思

int main()
{
    int x = 2, y = 6, z = 6;        
    x = y == z;
    printf("%d", x);
}

平等。如果操作数相等,则返回1,否则返回0。

它是“等于”运算符


在上面的示例中,
x
被分配了等式测试(
y==z
)表达式的结果。因此,如果
y
等于
z
x
将设置为
1
(真),否则
0
(假)。由于C(C99之前版本)没有布尔类型,因此表达式的计算结果为整数。

运算符测试是否相等。例如:

if ( a == b )
    dosomething();
x = y == z;
在你的例子中:

if ( a == b )
    dosomething();
x = y == z;
如果y等于z,则x为真(1)。如果y不等于z,则x为假(0)

新手C程序员常犯的一个错误(一些非常有经验的程序员也会犯错误)是:

在这种情况下,b被指定给a,然后作为布尔表达式进行计算。有时程序员会故意这样做,但这是一种糟糕的形式。另一个阅读代码的程序员不知道这是有意(很少)还是无意(更有可能)。更好的构想是:

if ( (a = b) == 0 )   // or !=
    dosomething();
这里,将b分配给a,然后将结果与0进行比较。意图是明确的。(有趣的是,我曾与从未编写过纯C语言的C程序员一起工作过,他们无法告诉您这是怎么回事。)

这是这么说的

X将等于真/1或假/0

另一种看待这条线的方式是:

x =  ( is y equal to true? then true/1 or false/0 )

==表示“适用于”。此运算符的优先级高于=(等于)运算符。所以方程x=y==z;将尝试将y==z的结果赋值给变量x。在本例中为1。

==用于相等的运算符。。 这里是你的例子
如果y等于z,那么x将具有真值,否则x将具有假值

 x = (6==6)
意思是给某物一个价值

==表示检查它是否等于某个值

比如说

int val = 5; //val is 5
//= actually changes val to 3
val = 3; 

//== Tests if val is 3 or not. 
//note: it DOES NOT CHANGE the value of val.
val == 3; 

int new_val = val == 3; //new_val will be 1, because the test is true

//the above statement is the same as
bool is_val_3 = false;
if( val == 3 )
   is_val_3 = true;
int new_val;
new_val = is_val_3;

//putting it together, 
val = new_val == 2; //sets val to 0. do you understand why now?
让我们这样开始:

 x = (6==6)
它问6等于6吗?:对

x=true,但由于x是int,因此x=1 x的新值为1

印行如下:
1

那么,它打印什么?对于
y
z
(和
x
,为了完整性)的其他值,它会打印什么?如果这样写,则更容易理解:x=(y==z);在您的示例中,由于
y
等于
z
,它将打印
1
。如果
y
不等于
z
,它将打印
0
。我想这是作业,因为我们几天前看到了完全相同的错误示例代码,不是吗?谢谢您提及优先级。新手C程序员的另一个潜在雷区+1我没有投反对票,但在我脑海中C99确实有一个布尔类型的via
stdbool.h
-它是编译器支持的实际类型,而不仅仅是
int
enum
(int)true==1
)。开发者不必使用它。@delty,可能应该澄清一下我的意思是C89。@detly:它的名称是
\u Bool
。仅名称就足以减少过度使用…@detly:No,标准将类型
\u Bool
定义为用户要使用的类型(6.2.5.2)。它还定义了
定义宏
bool
以扩展到
\u bool
(这仍然是出现在错误消息和警告中的名称。第7.1.3.1条将
\u Bool
作为保留标识符,但这并不意味着程序不应使用它–这意味着不允许程序引入此名称本身的定义。目标是为编译器编写者和未来的标准ex张力。(名称
\u Complex
\u virtual
也适用于用户。)哦,标准明确规定,未定义
bool
true
false
是可以的,而更改
\u bool
会导致未定义的行为。为了完整性,
y==z
的值为1或0。因此,“x为真(非零)…”最好用“
x
为1…”代替这是真的,但并不总是真的。在ANSI标准存在之前,我就开始使用C。K&R没有指定关系运算符的结果,只是说它们决定“结果的真假”(第38页)。他们接着说“一元求反运算符!将非零或真操作数转换为0,将0或假操作数转换为1。”由于K&R是当时唯一的标准,我学会了不要对布尔表达式的结果进行假设。ANSI C草案(X3.159.198x)在“3.3.8关系运算符”和“3.3.9相等运算符”中修复了这一问题。
int war=0;if(war=1){launchnuke();}
不可原谅的打字错误。