Jak správně přepsat bitwise operace

honza

Jak správně přepsat bitwise operace
« kdy: 28. 08. 2015, 18:07:17 »
Ahoj,
jsem tu jeste s jednim problemem..zjistil jsem, ze nerozumim poradne bitwise operacim.

Mam tyto konstatnty a kod:

Kód: [Vybrat]
pmask=0x1
# case A
        xmask = 0x00fe
        xshift = 1
        ymask = 0x7f00
        yshift = 8
        pshift = 0

x_addr = (addr&xmask) >> (xshift)
y_addr = (addr&ymask) >> (yshift)
a_pol =  (addr&pmask) >> (pshift)

Coz funguje spravne, a toto take funguje spravne:

Kód: [Vybrat]
# case B
        xmask = 0x03ff
        xshift = 12
        ymask = 0x01ff
        yshift = 22
        pshift = 11

x_addr = (addr >> xshift) & xmask
y_addr = (addr >> yshift) & ymask
a_pol =  (addr >> pshift) & pmask

Chtel bych pouzit jednotny zapis bit operaci ("x_addr = (addr >> xshift) & xmask" vs "x_addr = (addr&xmask) >> (xshift)"), ale pak je potreba prepocitat prislusne konstanty, a to se mi nedari (uz asi 2h).

Dekuji chytrym poctarum,


Kolemjdoucí

Re:Jak správně přepsat bitwise operace
« Odpověď #1 kdy: 28. 08. 2015, 18:37:37 »
Pokud se jedná o Javu tak pozor na rozdíl mezi >> a >>>.

honza

Re:Jak správně přepsat bitwise operace
« Odpověď #2 kdy: 28. 08. 2015, 18:41:36 »
Pokud se jedná o Javu tak pozor na rozdíl mezi >> a >>>.

Diky, pardon. Ne, je to python.

Re:Jak správně přepsat bitwise operace
« Odpověď #3 kdy: 28. 08. 2015, 19:23:44 »
Dost v tom dotazu postradam otazku :) Konstatovat, ze tomu asi nerozumis a ze se ti to nedari je sice hezky, ale jestli chces poradit, tak budes muset rict, co se snazis vypocitat a proc si myslis, ze se ti to nedari.

Pokud mas 
Kód: [Vybrat]
(x >> shift1) & mask1
a chces to prevest na
Kód: [Vybrat]
(x & mask2) >> shift2
tak plati
Kód: [Vybrat]
mask2 = mask1 << shift
shift2 = shift1
Na tom neni nic slozityho - pokud chces maskovat posunuty cislo, tak musis masku posunout stejne jako to cislo, to je cely.

Re:Jak správně přepsat bitwise operace
« Odpověď #4 kdy: 28. 08. 2015, 19:24:49 »
Pardon, preklep - "shift" ma byt samozrejme "shift1"


honza

Re:Jak správně přepsat bitwise operace
« Odpověď #5 kdy: 28. 08. 2015, 20:54:58 »
Dost v tom dotazu postradam otazku :) Konstatovat, ze tomu asi nerozumis a ze se ti to nedari je sice hezky, ale jestli chces poradit, tak budes muset rict, co se snazis vypocitat a proc si myslis, ze se ti to nedari.

Pokud mas 
Kód: [Vybrat]
(x >> shift1) & mask1
a chces to prevest na
Kód: [Vybrat]
(x & mask2) >> shift2
tak plati
Kód: [Vybrat]
mask2 = mask1 << shift
shift2 = shift1
Na tom neni nic slozityho - pokud chces maskovat posunuty cislo, tak musis masku posunout stejne jako to cislo, to je cely.

Mirek Prymek: dekuji! presne takovou nazornou ukazku jsem si pral, uz se mi to povedlo, vazne diky.
PS: Otazka, i kdyz bez ? se myslim dala vytusit z meho posledniho odstavce.

Re:Jak správně přepsat bitwise operace
« Odpověď #6 kdy: 28. 08. 2015, 21:30:03 »
Mirek Prymek: dekuji! presne takovou nazornou ukazku jsem si pral, uz se mi to povedlo, vazne diky.
PS: Otazka, i kdyz bez ? se myslim dala vytusit z meho posledniho odstavce.
Rado se stalo.

Vzdycky je lepsi otazky pokladat tak, ze popises problem, pak napises, co jsi zkousel a jak se vysledek lisi od toho, co ocekavas.