# Qué significa ? :

**URL:** <https://forum.arduino.cc/t/que-significa/666537>\
**Category:** Software\
**Created:** [July 21, 2020, 12:05pm UTC](https://forum.arduino.cc/t/que-significa/666537 "2020-07-21T12:05:30Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![numero110](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/numero110/32/215389_2.png) [@numero110](https://forum.arduino.cc/u/numero110)\
**Post date:** [July 21, 2020, 12:05pm UTC](https://forum.arduino.cc/t/que-significa/666537/1 "2020-07-21T12:05:30Z")

</div>

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

```cpp
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.

---

<div class="post-metadata">

**Author:** ![Surbyte](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/surbyte/32/217404_2.png) [@Surbyte](https://forum.arduino.cc/u/Surbyte)\
**Post date:** [July 21, 2020, 12:14pm UTC](https://forum.arduino.cc/t/que-significa/666537/2 "2020-07-21T12:14:22Z")

</div>

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

```cpp
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.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 7, 2021, 12:40am UTC](https://forum.arduino.cc/t/que-significa/666537/3 "2021-05-07T00:40:49Z")

</div>


