Ternery操作员

时间:2015-09-16 13:58:57

标签: c operators

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始终为零,无论maxXmaxY输入是什么?

2 个答案:

答案 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);