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



Teraz jest 13 gru 2024, o 09:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 12 kwi 2019, o 11:21 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

Witam
Mam trochę może głupia wątpliwość - jaka jest wartość logiczna wyrażenia a=0 ?
Oczywistością jest iż wartość arytmetyczna jest równa 0. Natomiast zastanawia mnie co z logiką? Przecież operator przypisania wykonuje się prawidłowo , więc teoretycznie wartość logiczna mogła by być true..
Wątpliwość powstała z okazji zastanawiania się nad instrukcją while (a=0).
Domyślam sie ,że wartość logiczna w tym wypadku mimo prawidłowego wykonania przypisania powinna być równa false, i while (a=0) jest tożsame z while(0) ,ale chciałbym to potwierdzić.
Dziekuję
WTG



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2019, o 11:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 368
Lokalizacja: Gliwice
Pomógł: 34

MisterWhite napisał(a):
Mam trochę może głupia wątpliwość - jaka jest wartość logiczna wyrażenia a=0 ?

W tym wypadku nie ma nic o wartości logicznej wyrażenia, użyłeś operatora przypisania "=".
Wartość logiczną uzyskasz korzystając z operatora porównania "==". Nie można obu używać zamiennie. To że często kompilator poprawi "=" na "==" nic nie zmienia.

Mam wrażenie, że albo coś mocno mieszasz, albo ja nie zrozumiałem Twojego problemu :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2019, o 11:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 164
Pomógł: 3

While zakłada że będzie tak długo się wykonywać aż będzie spełnione dla takiego warunku jaki mu postawisz, więc jeśli dla Ciebie prawdą jest że dopóki a=0 to będzie się to wykonywać. Natomiast samo sprawdzanie warunku w taki sposób jest błędne ponieważ a=0 to przypisanie wartości a porównanie warunku to a==0, co też jest nie najlepszym przyzwyczajeniem programistycznym.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2019, o 11:50 
Offline
Moderator
Avatar użytkownika

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

Zealota napisał(a):
W tym wypadku nie ma nic o wartości logicznej wyrażenia,


Ale jest jest ;)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


- wynikiem wyrażenia będzie FALSE - czyli zero ... po prostu wartość zmiennej a po przypisaniu

------------------------ [ Dodano po: 3 minutach ]

tylko trzeba sobie wziąć w nawias (a=0) żeby kompilator nie krzyczał - wtedy zrozumie, że chodzi mu o wartość wyrażenia w tych nawiasach

_________________
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  
PostNapisane: 12 kwi 2019, o 11:56 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

mirekk36 napisał(a):

- wynikiem wyrażenia będzie FALSE - czyli zero ... po prostu wartość zmiennej a po przypisaniu



Wielkie dzięki, o to mi chodziło. Pytanie wzięło sie z analizy jednej z funkcji obsługującej UART i skonstruowanej jakoś tak : while( c= putc) {}. Chciałem mieć pewność jak się zachowa po odebraniu "0".
Dzięki



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2019, o 11:58 
Offline
Moderator
Avatar użytkownika

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

No właśnie ten mechanizm tak się używa - sam tego używam w swoich bibliotekach często do wysyłania stringów ;)

_________________
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  
PostNapisane: 12 kwi 2019, o 12:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 368
Lokalizacja: Gliwice
Pomógł: 34

No jak podejrzewałem, nie rozumiałem o co chodzi autorowi, natomiast kontrukcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jest właściwie bez sensu :)
Po co tak zapisywać jeżeli wartość logiczna (a=0) nigdy się nie zmienia, a zarazem ciało while nigdy się nie wykona, a pewnie sprytny kompilator usunie to z kodu.
Oczywiście to tylko próba pokazania, że w jednej linijce można zrobić od razu przypisanie i sprawdzenie wartości logicznej natomiast podejrzewam, że sprawdzenie następuje "później" i to tylko na zmiennej "a". Jakby spojrzeć do asm to pewnie by się to wyjaśniło.
Przykład z
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
oczywiście jest tym sensownym i dopiero teraz kumam o co chodziło autorowi :)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO