eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › z uczty - jak znaleźć maskę najstarszego bitu?
Ilość wypowiedzi w tym wątku: 2

  • 1. Data: 2015-12-03 08:10:13
    Temat: z uczty - jak znaleźć maskę najstarszego bitu?
    Od: Borneq <b...@a...hidden.pl>

    W książce "Uczta programistów" było wyszukiwanie numeru najstarszego
    zapalonego bajtu dla 32 bitowych liczb:

    ///return the most significant bit which is set, the same as BSR
    assembler opcode
    ///but assembler is not portable
    int find_set_bit(unsigned int x)
    {
    int n;
    if (x==0) return 0;
    n = 0;
    if (x<= 0x0000ffff) { n = n+16; x = x << 16; }
    if (x<= 0x00ffffff) { n = n+8; x = x << 8; }
    if (x<= 0x0fffffff) { n = n+4; x = x << 4; }
    if (x<= 0x3fffffff) { n = n+2; x = x << 2; }
    if (x<= 0x7fffffff) { n = n+1; }
    return 31-n;
    }


    Mam funkcję sprawdzającą czy jest tylko jeden zapalony bit dla dowolnego
    typu:
    /**
    return true if is only 1 or 0 set bits
    (for 0 retuns true)
    if is severeal set bits return false
    */
    #define isAlone(x) ((x & (x - 1))==0)

    Porównywanie z zerem potrzebne jest tylko dla tego aby z wyniku równego
    zero lub różnego od zera dawał poprawny boolean 0 lub 1

    Jeśli obchodzi nas nie numer ale maska, mamy łatwiej:
    /**
    return the least significant bit in x which is set
    not bit number, rather low bit mask
    */
    #define lowbit(x) ((x) & (~(x) + 1))

    A teraz pytanie: czy jest jakaś funkcja analogiczna highbit(x), która
    była by równie krótka co lowbit a różniła by się od find_set_bit tym, że
    dawała by nie numer ale od razu maskę?


  • 2. Data: 2015-12-03 18:58:01
    Temat: Re: z uczty - jak znaleźć maskę najstarszego bitu?
    Od: platformowe głupki <N...@g...pl>

    no żarcik Ci się udał...

    a FFFFFFFFF>>N to nie łaska?

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: