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