unsigned char result= 0x0;
int maxX,maxY;
maxX = maxY = 0;
printf("enter input\n");
scanf("%d",&maxX);
scanf("%d",&maxY);
(maxX < 200)?(result | (1 )) :0;
(maxX > 1500)?(result | (1 <<1 )) :0;
(maxY < 200)?(result | (1 <<2 )) :0;
(maxY > 1500)?(result | (1 << 3)) :0;
printf("Result is %d\n",result);
为什么无论 maxX
和 maxY
输入如何,result
始终为零?
最佳答案
您正在计算三元运算符,但没有将它们分配给任何东西。这:
(result | (1 ))
获取 result
并将其与 1 进行或运算,但不对结果执行任何操作。
如果你用-Wall -Wextra
编译,它会警告你:
/tmp/x1.c: In function ‘main’:
/tmp/x1.c:12: warning: statement with no effect
/tmp/x1.c:13: warning: statement with no effect
/tmp/x1.c:14: warning: statement with no effect
/tmp/x1.c:15: warning: statement with no effect
如果您希望获取该结果并将其分配回 result
,请执行以下操作:
result |= (maxX < 200)?(1) :0;
result |= (maxX > 1500)?(1 <<1 ) :0;
result |= (maxY < 200)?(1 <<2 ) :0;
result |= (maxY > 1500)?(1 << 3) :0;
关于c - 三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32610744/