ATNEL tech-forum
https://forum.atnel.pl/

Baardzo podstawowe pytanie o wartośc wyrażenia
https://forum.atnel.pl/topic22165.html
Strona 1 z 1

Autor:  MisterWhite [ 12 kwi 2019, o 11:21 ]
Tytuł:  Baardzo podstawowe pytanie o wartośc wyrażenia

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

Autor:  Zealota [ 12 kwi 2019, o 11:36 ]
Tytuł:  Re: Baardzo podstawowe pytanie o wartośc wyrażenia

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

Autor:  Lex_ [ 12 kwi 2019, o 11:39 ]
Tytuł:  Re: Baardzo podstawowe pytanie o wartośc wyrażenia

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.

Autor:  mirekk36 [ 12 kwi 2019, o 11:50 ]
Tytuł:  Re: Baardzo podstawowe pytanie o wartośc wyrażenia

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

Autor:  MisterWhite [ 12 kwi 2019, o 11:56 ]
Tytuł:  Re: Baardzo podstawowe pytanie o wartośc wyrażenia

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

Autor:  mirekk36 [ 12 kwi 2019, o 11:58 ]
Tytuł:  Re: Baardzo podstawowe pytanie o wartośc wyrażenia

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

Autor:  Zealota [ 12 kwi 2019, o 12:20 ]
Tytuł:  Re: Baardzo podstawowe pytanie o wartośc wyrażenia

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

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/