RE: Chyba v C - velmi podivné chování
Pavel Hudecek
edizon na seznam.cz
Pondělí Duben 20 22:06:44 CEST 2020
Takže se po pár měsících můžu vrátit k tomu, že jedna z výhod C je možnost dělat věci, jako:
If ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y) > 3) {
Což v jiných jazycích vede na 6 ifů a 1 pomocnou proměnnou.
PH
Od: Jan Waclawek
Hm, tak potom by som mal asi tomu JW z minulosti jednu tresnut...
Konkretne teda, C99, 6.5.8 Relational operators #6:
Each of the operators < (less than), > (greater than), <= (less than or
equal to), and >=
(greater than or equal to) shall yield 1 if the specified relation is true
and 0 if it is false. 92)
The result has type int.
Ten footnote 92) je kuzelny:
The expression a<b<c is not interpreted as in ordinary mathematics. As the
syntax indicates, it
means (a<b)<c; in other words, if a is less than b, compare 1 to c;
otherwise, compare 0 to c.
wek
----- Original Message ---------------
Mìl jsem nìjak za to, e to byl právì jistý JW, kdo mi tu onehdá vyèetl, e
spoléhat se, e výsledkem podmínky je 0 nebo 1 není správné:-)
PH
Od: Jan Waclawek
> A jinak teda ten kód udilá to, ?e pokud je splnina podmínka v závorce, nastaví se bit 0 na výstupní (zda to bude bit 0 není zarueeno, ale jinak skoro jisté).
Preco by to nemal byt bit 0?
_______________________________________________
>>
>> DDRB |=(1<CLK_UP);
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200420/d4ac8694/attachment.html>
Další informace o konferenci Hw-list