Qué significa ? :

Hola.
Estoy estudiando un programa, en esta parte del código.

flop = 0b01010001

void writeDatos(uint32_t Dato) {
  //esta rutina registra una palabra de 32 bits en
  // msb (b31) first, lsb (b0) last
  for (byte flop = 32; flop > 0; flop--) { // La palabra PLL tiene 32 bits
    (Dato & 0x80000000 ? PORTB |= 0b00001000 : PORTB &= 0b11110111);  
    PORTB |= 0b00010000;                   // clock in bit on rising edge of CLK (PB4 = 'pin12' = 1)
    PORTB &= 0b11101111;                   // 
    Datos <<= 1;                         // rotate left for next bit
  } // for flop
  PORTB |= 0b00000100;                   // 
  PORTB &= 0b11111011;                   // 
} // writeDatos

no entiendo la linea (Dato & 0x80000000 ? PORTB |= 0b00001000 : PORTB &= 0b11110111);

Que función hace “?” y “:”

Gracias por la ayuda.

Se lo llama operador condicional y su función es así

expresion1 ? expresion2 : expresion3

Se evalúa la expresión1, si es True o Verdadera entonces se evalúa la expresión2.
Si la expresión1 es False entonces se evalúa la expresión3.

De ese modo en tu caso tienes

Dato & 0x80000000 ? PORTB |= 0b00001000 : PORTB &= 0b11110111

expresion1 = Dato & 0x80000000
Solo buscas el bit mas significativo si esta en 1 y descartas todo lo demás.

Si es True entonces PORTB |= 0b00001000 o sea pones en 1 el bit 3
Si es False entonces PORTB &= 0b11110111 pones a 0 el bit 3.