AJUDA COM PROGRAMAÇÃO (state ? bit : 0)

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:

        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?

É uma forma simplificada de fazer um if.

Essa linha:

uint8_t stateMask = (state ? bit : 0);

Funciona da mesmissima forma que o código abaixo:

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

Ou seja:

( condição ? valor_se_verdadeiro : valor_se_falso )

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?

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!

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.

Vlw amigo. Mt obrigado msm.