Hirdetés

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

  • vlevi
    nagyúr

    Hát ez az. De az int ugye signed int. Ezért nem mindegy, hogy a long->int veszteséges átalakításnál mi történik. Ha csak eldobja a felső két byte-ot, akkor minden ok. Ha azonban az átalakítás Integer.MAX_VALUE és MIN_VALUE között történik, akkor az algoritmustól függően a színek (kevésbé átlátszó) felét elveszíthetem.

    Eddig úgy tűnik, hogy a primitív típusoknál az előbbi történik. Abban nem voltam biztos, hogy ez mennyire biztosan van így.

    Nem veszíted el.
    Pusztán arról van szó, hogy az egész számként tárolt színek között lesznek negatív számok is, de attól még az az információ ott van.
    Az, hogy az int előjeles, nem számít.
    Az előjeles számok annyiban különböznek az előjel nélküliektől, hogy a bináris számábrázolásban a legfelső bitet előjelként értelmezik, és nem számként. Egy előjel nélkül 1 byteon tárolt érték emiatt lehet 0-255, de ha előjelesként értelmezed, akkor -128 és 127 közti érték lehet.
    Ahogy a class leírása is írja, a fekete szín pl. -16777216 (0xff000000).
    Tulajdonképpen az összes szín egy negatív szám lesz, (majdnem mind), mert a 4 byteból az első az áttetszőséget jelenti, ahol 0 a teljesen áttetsző, és 0xff a teljesen lefedett. Ebből az is egyenesen következik, hogy ha az áttetszőség értéke 128-at meghaladná, akkor az egy negatív szám (azért, mert akkor az 1 byteon tárolt érték legfelső bitje 1-es lesz). De azon az 1 biten tárolt információ akkor sem vész el..

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