Dubbio sulla funzione shiftOut (file wiring_shift.c)

Scusate, so che sembrerà strana come domanda, però non riesco a capire il perchè del doppio NOT alla riga 7 e 9. Che utilità ha? :expressionless:
Ho provato a far assumere a “val” diversi valori e non cambia nulla se ometto i “!!”

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
	uint8_t i;

	for (i = 0; i < 8; i++)  {
		if (bitOrder == LSBFIRST)
			digitalWrite(dataPin, !!(val & (1 << i)));
		else	
			digitalWrite(dataPin, !!(val & (1 << (7 - i))));
			
		digitalWrite(clockPin, HIGH);
		digitalWrite(clockPin, LOW);		
	}
}

Serve per trasformare il risultato dopo il doppio !! in una valore che sia 0 oppure 1.
Nel caso in cui il risultato fosse maggiore di 1, hai la certezza che sarà 1.

:astonished: cacchio è vero, mi sento il famoso nano sulle spalle dei giganti... :blush: