Keresés

Új hozzászólás Aktív témák

  • Joooe

    tag

    válasz cucka #2398 üzenetére

    Most gyorsan átlapoztam a K&R-t de nem látom annak garanciáját, hogy ez így működni fog. Ilyen méretekben valószínűleg működik, mert a hardver adottságaiból adódóan defaultból int-ként végzi el a számolást és aztán annak ''int-té castolásakor'' ugye nem történik semmi, tehát marad a helyes eredmény.

    De ha ugyanezt az elvet követjük amit alkalmaztál, és ugyanakkor kevésbé vasbarát méretekig növeljük a dolgot:
    unsigned __int64 mix32(unsigned __int32 h, unsigned __int32 l)
    {
    return (h << 32) + l;
    }


    esetben már túlcsordul.

    unsigned __int64 mix32(unsigned __int32 h, unsigned __int32 l)
    {
    return ((__int64)h << 32) + l;
    }


    Így viszont jó.

    Lehet hogy működik, de én biztosabbnak érzem mindig explicit módon castolni ilyen bites játszadozásoknál:
    unsigned int assign16(unsigned char LD, unsigned char HD)
    {
    return ((unsigned int)HD << 8 | (unsigned int)LD) >> 3;
    }


    De ha ez csak az én ''szám íze'' szerint van így akkor bocsi :)


    [Szerkesztve]

Új hozzászólás Aktív témák