Witam.
Dziś postanowiłem pierwszy i ostatni raz zapytać się o sens warunku pętli while(), gdyż z programowaniem jak z matematyką - nie zrozumiemy granic, to nie zrozumiemy pochodnych, analogicznie - nie zrozumiałem dokładnie dlaczego warunek w pętli while jest negowany operatorem
! i wszystko wraca.

Przechodząc do meritum, chodzi o warunek w funkcjach komunikacyjnych I2C z układem RTC, mianowicie w "bluebook'u" na str. 279 postanowiłem przewertować po raz kolejny sens tych zapisów - wszystko jest zrozumiałe do momentu pojawienia się warunku:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Oto cała funkcja:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Ja to widzę tak:
Rejestr TWCR w zapisie binarnym wyglądałby następująco:
TWCR = 0b
10
100
100
1 - TWINT
1 - TWSTA
1 - TWEN
Następnie mamy operację AND, a więc:
TWCR&(1<<TWINT) = 0b
10
100
100 &
10000000
Wynik (bez negacji):
10000000
Wynik (po zanegowaniu): !(
10000000) =
01111111
Moje pytanie brzmi:
Funkcja while() jest wykonywana dopóki warunek jest spełniony, a w tym przypadku do momentu gdy nie otrzymamy 0, ale zanegowanie powoduje przecież, że zawsze warunek będzie spełniony ponieważ gdy flaga TWINT nie jest wyzerowana, to wynikiem operacji będzie 0b
11111111 , jest to wyrażenie większe od zera.
PS. Wiem, że ja coś źle interpretuję, ale problem w tym, że nie wiem kiedy robię ten koszmarny błąd.
Pozdrawiam.