Go Down

Topic: AJUDA COM PROGRAMAÇÃO (state ? bit : 0) (Read 632 times) previous topic - next topic

wizarcl

   Pessoal, estou estudando um pouco mais a fundo o arduindo e ja descobri mtas coisas legais, como por exemplo escrever duas saidas ao mesmo tempo, em fim... mas estou uma baita duvida, não encontrei nada a respeito disto, dentro do código do PulseIn tem a seguinte atribuição:
Code: [Select]
       unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout)
uint8_t bit = digitalPinToBitMask(pin);
[b] uint8_t stateMask = (state ? bit : 0);[/b]

O que esta interrogação e este dois pontos fazem com os bits?

LegendBR

É uma forma simplificada de fazer um if.

Essa linha:

Code: [Select]

uint8_t stateMask = (state ? bit : 0);


Funciona da mesmissima forma que o código abaixo:

Code: [Select]

uint8_t stateMask;
if (state)
   stateMask = bit;
else
   stateMask = 0;


Ou seja:

Code: [Select]

( condição ? valor_se_verdadeiro : valor_se_falso )

wizarcl

Muito obrigado amigo. Mais uma coisa, eu poderia então, fazer comparação utilizando uma linha apenas como esta para comparar um valor que não seja booleano também certo?
Code: [Select]
uint8_t stateMask = (state==valor_comparado ? bit : 0);



ou ainda posso tb acrescentar mais informações como mais se o valor for verdadeiro ou falso?
como eu pesquiso isto no google? Do que se trata afinal? Isso pode ser usado no C++  tb ou e especifico do ardu?
Vlw man!

LegendBR

Isso se chama operador ternário. O código que você postou funciona sem problemas, a ideia é isso mesmo.

Esse operador faz parte do C e derivados (C++, C#, etc.), e não somente do Arduino. Outras linguagens também têm esse operador.

wizarcl


Go Up