PIC a C
David Obdrzalek
David.Obdrzalek na mff.cuni.cz
Úterý Květen 20 11:48:51 CEST 2014
A proc to nepisete jako
if(byte&1)
{
... // tady bit je nahozeny
}
else
{
... // tady bit je shozeny
}
tedy bez toho porovnani na 1 nebo 0. Podminka je vyhodnocena jako int, ktery je
bud 0 (nesplneno) anebo cokoli jineho (splneno), tak je to porovnani zbytecne,
kdyz uz beztak tim byte&1 dostanete 0 nebo 1 (tj. neco jineho).
A jeste hrozi, ze casem zmenite aplikacni logiku a budete testovat vyssi bit, a
pak uz if((byte&maska)==1) nebude splnene nikdy.
Uprimne, vzdycky, kdyz vidim takovehle explicitni porovnani na nulu anebo
porovnani nahozeneho bitu s 1, tak zkoumam, co tim autor chtel specialniho
rict, proc je dulezite, ze to je zrovna 1 a ne neco jineho nenuloveho. V C to
je asi jako byste v Pascalu psali if A=TRUE ... else if A=FALSE (anebo, to uz
jsem taky kolikrat videl: if A=TRUE then B=TRUE else B=FALSE;)
Chapu, ze se to muze mene zkusenym zdat jako snazsi k pochopeni, me to ale
pripada zavadejici az osklive. Tady taky hrozi, ze tam napisete jen jedno
rovnitko jako v Pascalu, a kdyz vlevo nebude vyraz ale promenna, tak se to tam
priradi (u vyrazu aspon prekladac zarve, ale kdyz tam bude l-value tak to
maximalne da warning, pokud vubec).
Ted me tak napada dotaz pro vetsi znalce - proc vlastne ma porovnani vyssi
prioritu nez bitove operace? (ze ma porovnani vyssi prioritu nez logicke citim
prirozene dobre, ale u bitovych se mi ted na prvni kuk zda, ze by spis bitove
mely mit vyssi prioritu, aby se lip skladaly vyrazy. Protoze kdyz vysledkem
porovnani je nula/nenula, tak delat s tim pak dalsi bitove operace mi prijde
ponekud zvrhle)
D.O.
On 19 May 2014 at 12:02, Zuffa Jan wrote:
>
> prekladac je V9.81
> a kedze teraz uz vsetko funguje ako ma
> nemusite ani hadat kde sa stala chyba :)
> tie zatvorky som tam urcite skusal ale momentalne tam nie
> su :( dakujem vsetkym za nakopnutie
>
>
> j.
>
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jaromir
> Sukuba
> Sent: Monday, May 19, 2014 11:50 AM
> To: HW-news
> Subject: Re: PIC a C
>
> Pocuj, "hitec", aku verziu tohto historickeho kompilatora mas? ;-)
>
> Mne to vo verzii 9.83 a aj v XC8 (skus ho, v mojom testovacom priklade
> generuje XC8 v 1.3 asi polovicny kod) mi to v tom druhom pripade vzdy vychadza
> ako false, nie true - co aj napoveda logika a analyza kolegu Stengla.
> Samozrejme, blbost je ze tam nemas zatvorky, ako ostatni nacrtli. So
> zatvorkami to ide ako ma, overene v HiTech 9.83 a XC8 v 1.3
>
> Dňa 19. mája 2014 11:09, Zuffa Jan <ZuffaJ na cgc.sk> napísal/a:
> > Ahojte,
> >
> > cez vikend som pri programovani PIC (HiTec)
> >
> > narazil na nasledovny problem:
> >
> > ak napisem podmienku if(byte & 1 == 1)
> >
> > pracuje vzdy zpravne podla toho aku hodnotu ma bit 0
> >
> > ak vsak napisem if(byte & 1 == 0) bez ohladu na bit 0 sa podmienka
> >
> > vzdy vyhodnoti ako true. Nieco som nepochopil alebo to takto skutocne
> > funguje?
> >
> >
> >
> > j.
> >
> >
> > _______________________________________________
> > HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
> >
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list