Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 21 sty 2026, o 12:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
 Tytuł: Negacja !
PostNapisane: 4 gru 2016, o 02:13 
Offline
Użytkownik

Dołączył(a): 09 lis 2014
Posty: 33
Pomógł: 0

Mam problem ze zrozumieniem negacji logicznej.Może to głupie pytanie ale nie mogę tego ogarnąć.

Dlaczego Pan Mirek w książce pisze że !a to to samo co a == 0 ?
Dlaczego a == 0 daje w wyniku prawdę/
Przecież a == 0 -znaczy a równe zero (czyli fałsz)

wyrażenie !a wg. książki daje prawdę (ale skąd to wiemy nie znając wartości a)

jeśli a=0 to wtedy !a = prawda
jeśli a=66 to wtedy !a = fałsz
więc dlaczego w książce jest napisane że a == 0 daje prawdę tak samo jak !a ???

Dlatego mam problem z analizą i zrozumieniem tego kodu:
if( !key_lock1 && !(PIND & KEY1) ){
key_lock1=1;
D1_TOG;

}else if( key_lock1 && (PIND & KEY1) ) key_lock1++;
W pierwszym wyrażeniu !key_lock1 musi dać 1 (prawdę) czyli musi wynosić 0.
Nigdzie w kodzie nie jest zdefiniowane ze key_lock1 na początku ma mieć 0, więc skąd to wie kompilator?

Prawdopodobnie nie zrozumiałem książki tak jak należy.
Czy ktoś by mógł mi to wytłumaczyć Łopatologicznie? :mrgreen:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 04:35 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

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 = 0

nie 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 = 5

Kod:
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 = 0

Kod:
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 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 11:10 
Offline
Użytkownik

Dołączył(a): 09 lis 2014
Posty: 33
Pomógł: 0

Dziękuję Mirku za odpowiedź.
Ja to doskonale rozumiem że:

a=5
to !(a) =fałsz

a=0
to !(a) = prawda

Ale pytałem o coś innego
W książce piszesz że if(a==0) to to samo co if(!a) ,
Ponieważ a==0 daje w wyniku prawdę tak samo jak wyrażenie !a

A ja pytam skąd mam wiedzieć jaka jest wartość a?
W książce nie napisałeś ile wynosi a ,a napisałeś że w wyniku dają prawdę więc muszą mieć wartość 0.

Wtedy warunek a==0 i !a dadzą prawdę ale tylko gdy a=0.

Czy zmienna a jeśli jej nie zdefiniowaliśmy przyjmuje wartość 0????? O to pytam??

Bo jak widzę ten kod to rozumiem:
a=0
a==0 prawda
!a prawda

a jak widzę to:
a==0
!a
to za "husteczkę" :cry: nie mogę zrozumieć skąd ,ja lub kompilator ma wiedzieć ile wynosi a??????



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 12:01 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Marcin Bąk napisał(a):
a jak widzę to:
a==0
!a
to za "husteczkę" nie mogę zrozumieć skąd ,ja lub kompilator ma wiedzieć ile wynosi a??????


A po choinkę nam wiedzieć ile wynosi a ? .... ;)
hmmm to powiem inaczej ... a rozumiesz skąd np biorą się takie zapisy ?

I = U/R

prawo Ohma ... nie mamy tu żadnych liczb/cyfr a wiemy, że to tylko wzór i żeby go rozwiązać trzeba podstawić coś pod symbole I,U,R

tak samo z tym a ...

Na początku pytałeś, przypomnę:

Marcin Bąk napisał(a):
Dlaczego Pan Mirek w książce pisze że !a to to samo co a == 0 ?


No więc wyżej tobie to wyjaśniłem - a ty wciąż to samo ? czy teraz masz teraz inne pytanie ?

zrozum WARTOŚĆ WYRAŻENIA LOGICZNEGO - bo tego może nie potrafisz zrozumieć - podkreślam WARTOŚĆ WYRAŻENIA LOGICZNEGO

( a == 0 )

Będzie DOKŁADNIE taka sama dla obu zapisów - NIEZALEŻNIE jaką liczbę podstawisz sobie pod zmienną a, więc dla wyjaśnienia tego kompletnie nie ma znaczenia jaką wartość podstawimy do zmiennej a. Tak jak z wzorem I=U/R

( !a )


Podsumowując dla a=0 oba podane wyżej wyrażenia zwrócą wartość TRUE zaś dla a = np 5 obydwa wyrażenia zwrócą FALSE

_________________
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 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 12:27 
Offline
Użytkownik

Dołączył(a): 09 lis 2014
Posty: 33
Pomógł: 0

Ok traktując !a jako wzór,nie możemy określić jaki będzie wynik wyrażenia logicznego (prawda czy fałsz) bez znania wartości a.

W książce w rozdziale o negacji !, piszesz "Ponieważ a==0 daje w wyniku prawdę,tak samo jak wyrażenie !a" a wcześniej nie piszesz że a=0. -więc skąd wiesz że da prawdę?????

Dlatego tak dociekałem o ta wartość a,jeśli jej nie zdefiniujemy to nie wiemy jaki będzie wynik.To mnie wprowadziło w błąd i szukałem dziury w całym.

Pozdrawiam Miłej Niedzieli!!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 12:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Marcin Bąk napisał(a):
To mnie wprowadziło w błąd i szukałem dziury w całym.

No to rzeczywiście masz rację szukałeś dziury w całym ;) i nie mam pojęcia co ciebie mogło wprowadzić w błąd ;) .... rozdział MEGA KRÓTKI aż go przytoczę w całości

Cytuj:
Wykrzyknik jest jednoargumentowym operatorem negacji. Zawsze stoi po lewej stronie
argumentu, którego dotyczy. W połączeniu z argumentem tworzy wyrażenie, które
jest prawdą lub fałszem. Zatem wyrażenie:

!a

jest prawdą tylko wtedy, gdy a jest równe zero. Fałszem zaś, gdy a jest różne od zera.


To powoduje, że często zamiast zapisu:
if(a == 0) <-- spotkasz równoważny zapis --> if(!a)
Ponieważ a == 0 daje w wyniku prawdę, tak samo jak wyrażenie !a.


I jak mi powiesz, że nie napisałem TEGO SAMEGO co wyżej - to jestem księdzem ;)

_________________
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 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 13:10 
Offline
Użytkownik

Dołączył(a): 09 lis 2014
Posty: 33
Pomógł: 0

Oczywiście że nie jesteś księdzem :D

Chodzi mi tylko o ostatnie zdanie.

Piszesz że a==0 da prawdę ,tak samo jak !a ale czy wcześniej wspomniałeś że zakładasz z góry że a=0??? No nie...

Więc ja mega początkujący mogę założyć że podstawiasz do "wzoru" 1 i wtedy mi się nie zgadza .

To co podkreślasz na czerwono oczywiście ROZUMIEM,chodziło mi tylko o OSTATNIE zdanie.
A tak naprawdę o wartość jaką założyłeś dla a ,oczywiście rozumiem że jak piszesz że będzie prawda to a musi być 0.

Tylko o to mi chodziło.
Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 13:14 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Najważniejsze, że już ci się wyjaśniło ... ;)

_________________
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 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 13:18 
Offline
Użytkownik

Dołączył(a): 09 lis 2014
Posty: 33
Pomógł: 0

Dziękuję Mirku że masz cierpliwość do takich ananasów :mrgreen:

No przez takie wpadki i wtopy i wertuję "doczytuję" i zaczynam coraz więcej kojarzyć.. ale droga daaaleka.

Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 14:01 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

spokojnie - po to jest to forum, żeby pomóc - a wg mnie ZAWSZE warto pytać gdy się nad czymś zatniemy w książce .... Razem damy radę ;)

_________________
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 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 17:27 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 563
Pomógł: 28

Z tym "a" to może dla tego że to była zmienna globalna a nie zainicjowana zmienna globalna przyjmuje wartość zero.
z tond autor znał wartość wyrażenia.

Cytuj:
A ja pytam skąd mam wiedzieć jaka jest wartość a?
W książce nie napisałeś ile wynosi a ,a napisałeś że w wyniku dają prawdę więc muszą mieć wartość 0.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 19:08 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

mirekk36 napisał(a):
Ponieważ a == 0 daje w wyniku prawdę, tak samo jak wyrażenie !a.


Panowie panowie - żadna zmienna globalna ... no prosta sprawa

Zwykle gdy zależy nam na sprawdzeniu czy w a jest wartość zero to piszemy taki warunek

if( a == 0 ) ...

szczególnie gdy mówię, że wyrażenie to daje wartość TRUE - i dlatego wspominam że można to wyrażenie zastąpić

if( !a ) ....

więc po co te dywagacje - co jest w a abo czego w tym a nie ma ;)

_________________
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 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Negacja !
PostNapisane: 4 gru 2016, o 21:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Marcin Bąk napisał(a):
Piszesz że a==0 da prawdę ,tak samo jak !a ale czy wcześniej wspomniałeś że zakładasz z góry że a=0??? No nie...

Może ja trochę z innej strony.
W programie masz jakiegoś if'a i chcesz aby program w niego wszedł gdy to nieszczęsne "a" będzie wynosiło ZERO. Nie że kol.Mirek podrzucił a=0, Ty chcesz ten warunek.
I dla tego if "się spełni" gdy a=0, a można to zapisać:
1) a==0; tutaj wiadomo i czytelnie
2) !a; wyrażenie tożsame z poprzednim ponieważ tylko "zaprzeczone" ZERO ( czyli gdy a=0) będzie dla if'a pozwoleniem do roboty.
Myślę że problemem jest to, że skupiłeś się na literce "a" tracąc z oczu if'a.
Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO