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确实有一个布尔类型的viastdbool.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();}
不可原谅的打字错误。