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);
为什么result
始终为零,无论maxX
和maxY
输入是什么?
答案 0 :(得分:5)
您正在评估三元运算符,但您没有将它们分配给任何东西。这样:
public class TestMessageHandler implements AcknowledgingMessageListener {
private static final Logger logger = LoggerFactory.getLogger(TestMessageHandler.class);
@Override
public void onMessage(KafkaMessage message, Acknowledgment acknowledgment) {
logger.info(message.toString());
acknowledgment.acknowledge();
}
}
取(result | (1 ))
并将其与1进行或运算,但不对结果做任何事情。
如果您使用result
进行编译,它会警告您:
-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
答案 1 :(得分:2)
所有这些?:
行完全没有副作用。你不会在任何地方写一个变量,所以它们会被优化掉。您的编译器应警告您有关无效的表达式。
您的代码与此完全相同:
unsigned char result= 0x0;
int maxX,maxY;
maxX = maxY = 0;
printf("enter input\n");
scanf("%d",&maxX);
scanf("%d",&maxY);
printf("Result is %d\n",result);