Wpis z mikrobloga

Mirki programery szybkie pytanko:

Co w tym zapisie Was dziwi?

while (!UDA1380_Init(UDA1380_MIC_IN_LR & - (micIn != 0))) {}
Bo mnie ten #!$%@? znak minusa. To fragment kodu od naszych żółtych przyjaciół ze wschodu i zastanawiam się co autor miał na myśli..

#programowanie
  • 10
  • Odpowiedz
@blowfish: bardziej mi chodziło o sens takiego zapisu gdzie działam na liczbie zapisanej binarnie, nie dało się prościej zapisać i czytelniej?
  • Odpowiedz
@paw39: - (micIn != 0)

bool rzutowany na inta. dajmy na to 8 bitowego.

a) true daje nam 11111111 (bo negacja znaku dla 00000001)

b) false daje nam 00000000 (bo nie ma negacji znaku dla 00000000)
  • Odpowiedz
@phervers: nope. trick z minusem opiera się czysto dla bitowej reprezentacji. chodziło o to, by w przypadku gdy micIn == 0, to UDA1380MICINLR & 00000000, zaś gdy micIn != 0 to UDA1380MICINLR & 11111111. Równie dobrze można było to napisać tak:

UDA1380Init(UDA1380MICINLR & (micIn ? -1 :
  • Odpowiedz