int xx = 0;
if(xx = 0 || xx == 0) printf("4"); // if(TRUE||TRUE) then printf("4")
if(xx == 0) printf("5"); //xx been changed to 1??
printf("6\n");
Run Code Online (Sandbox Code Playgroud)
我以为输出为456,但输出为46。为什么?
根据运算符优先级,operator||具有比更高的优先级operator=,则
if(xx = 0 || xx == 0)
Run Code Online (Sandbox Code Playgroud)
与...相同
if(xx = (0 || xx == 0))
Run Code Online (Sandbox Code Playgroud)
即xx由分配0 || xx == 0; 它是true,然后隐式转换为1并赋值给xx(因为xx是int),然后xx对该if条件求值,并隐式转换为boolwith value true;这就是为什么得到输出的原因"4"。既然xx已经分配给1您,那么您就不会得到输出"5"。
我想你想要的是
if(xx == 0 || xx == 0)
// ^^
Run Code Online (Sandbox Code Playgroud)