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