Automaticke pretypovani u AVR-GCC

Petr Tomasek tomasek@etf.cuni.cz
Středa Červenec 22 14:23:31 CEST 2009


> > unsigned long x;
> > unsigned char a1, a2, a3, a4;
> > 
> > a1 = x;
> > a2 = x >> 8;
> > a3 = x >> 16;
> > a4 = x >> 24;
> > 
> > který se přeložil tak, že první tři přiřazení prostě vybraly ten správný 
> > byte z dwordu x, zatímco to čtvrté se přeložilo jako smyčka s 24 
> > iteracemi rotace po jednom bitu.
> > 
> > Lukáš Grepl
> 
> To by mozna melo nasledujici reseni:
> a4 = ((x >> 16) >> 8);
> :-)

Lepsi je v takovem pripade pouzit union, treba jako:

typedef union {
    unsigned long val32;
    struct {
      unsigned char a4;
      unsigned char a3;
      unsigned char a2;
      unsigned char a1;
    } val8;
  } int32;

(Samozrejme je nutne vedet, jaci indiáni rostou v dane architekture...)

P.T.

-- 
Petr Tomasek <http://www.etf.cuni.cz/~tomasek>
Jabber: butrus@jabbim.cz
SIP: butrus@ekiga.net



Další informace o konferenci Hw-list