Marcin Bąk napisał(a):
Dlaczego Pan Mirek w książce pisze że !a to to samo co a == 0 ?
W języku C panie kochany KAŻDA wartość równa ZERO oznacza FAŁSZ, zaś KAŻDA inn wartość niż ZERO czyli jakakolwiek liczba

poza zerem to wartość TRUE rozumiesz ? ... to jest dla ciebie kluczem i piszę też o tym w Bluebooku

tylko chyba to pominąłeś.
Poza tym, widzę że na pewno albo pominąłeś albo zapomniałeś - rozdział o OPERATORACH LOGICZNYCH z książki. Dlaczego tak sądzę ? ano dlatego że pewnie dla ciebie wyrażenie:
a == 0 to to samo co
a = 0nie nie dwa znaki == to operator LOGICZNY zaś jeden znak = to zwykły operator przyrównania i dlatego jeśli np w zmiennej będziemy mieli liczbę 5 to wartości dwóch wyrażeń jak niżej będą wyglądały tak:
Kod:
( a == 0 ) ----> FAŁSZ
( a == 5 ) ----> TRUE
jeśli zaś chcemy sprawdzać w warunku szybciutko zawsze tylko to czy a jest równe zero to można to napisać albo tak:
Kod:
if( a == 0 ) ....
albo tak
Kod:
if( !a ) ...
dlaczego można tak ( !a ) ??? ano dlatego, że tu korzystamy z operatora NEGACJI ale LOGICZNEJ co to oznacza ?
wykrzyknik zawsze zamieni nam FAŁSZ na PRAWDĘ i odwrotnie - PRAWDĘ na FAŁSZ - więc spójrz na to tak
Kod:
if( ! (a) )
potraktuj samą wartość a jako wyrażenie - dlatego dałem a w nawiasach dodatkowo poglądowo. Rozpatrzmy ze dwa trzy przykłady
gdy
a = 5Kod:
if( ! ( 5 ) ) ....
pięć to wartość inna niż ZERO tak? więc zgodnie z tym co pisałem wyżej wartość logicznie = TRUE (PRAWDA) ale mamy operator NEGACJI - wykrzyknik a więc wartością tego całego wyrażenia
Kod:
( !(5) )
będzie ? FAŁSZ - bo zanegowaliśmu TRUE

teraz inny przypadek - gdy
a = 0Kod:
if( !(a) ) ...
czyli
Kod:
if( ! (0) ) ...
jak mówiłem wartość liczbowa ZERO zawsze oznacza jeśli chodzi o wyrażenie logiczne FAŁSZ czyli wartość wyrażenia (0) = FAŁSZ, ale mamy wykrzyknik

czyli negację a więc wartością całego wyrażenia
Kod:
( ! (0) )
będzie TRUE (PRAWDA)
jaśniej teraz ?

_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]