PIC a C
Josef Štengl
ok1ced na nagano.cz
Pondělí Květen 19 11:44:03 CEST 2014
Hmm.
------------------------
if(byte & 1 == 1)
se rozpadne na (zpracuje):
1 == 1 -> výsledek je 1
byte & 1 -> výsledek je dle očekávání, to jest rozhodující je LSB bit proměnné byte.
----------------
if(byte & 1 == 0)
1 == 0 -> výsledek je nula
byte & 0 -> je vždy nula.
Hmm a tady se lišíme.
takže kýžený výsledek by měl dáti zápis
if ((byte & 1) == 1)
if ((byte & 1) == 0)
Pro jistotu vyzkouším GCC
d = 0xFF, if (d & 1 == 1)
vyšlo true
d = 0xFF, if (d & 1 == 0)
vyšlo false
d = 0x00, if (d & 1 == 1)
vyšlo false
d = 0x00, if (d & 1 == 0)
vyšlo false
d = 0xFF, if ((d & 1) == 1)
vyšlo true
d = 0xFF, if ((d & 1) == 0)
vyšlo false
d = 0x00, if ((d & 1) == 1)
vyšlo false
d = 0x00, if ((d & 1) == 0)
vyšlo true
Pokud vám to vychází jinak, vyměňte kompilátor. Blbá rada, ale jinou nemám.
Jo, ještě zdroják, přeci jsem to psal na rychlo před obědem :-)
#include <stdio.h>
int main(void)
{
int d;
d = 0xFF;
printf("d = 0xFF, if (d & 1 == 1)\n");
if (d & 1 == 1)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
printf("d = 0xFF, if (d & 1 == 0)\n");
if (d & 1 == 0)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
d = 0x00;
printf("d = 0x00, if (d & 1 == 1)\n");
if (d & 1 == 1)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
printf("d = 0x00, if (d & 1 == 0)\n");
if (d & 1 == 0)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
d = 0xFF;
printf("d = 0xFF, if ((d & 1) == 1)\n");
if ((d & 1) == 1)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
printf("d = 0xFF, if ((d & 1) == 0)\n");
if ((d & 1) == 0)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
d = 0x00;
printf("d = 0x00, if ((d & 1) == 1)\n");
if ((d & 1) == 1)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
printf("d = 0x00, if ((d & 1) == 0)\n");
if ((d & 1) == 0)
printf(" vyšlo true\n");
else
printf(" vyšlo false\n");
return 0;
}
hezký den,
ced
Dne 19.5.2014 11:09, Zuffa Jan napsal(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
>
Další informace o konferenci Hw-list