Jak to przeskoczyć?

0

Witam!!

Mam problem ze skompilowaniem takiej linik kodu:

short x=.....;
short S=.....;

x = (x & 0xffffff00) | S;

Otrzymuje komunikat od kompilatora: "possible loss of precizion. found : int, required: short" ze wskazaniem, że S jest wartością typu int.

Analogiczny błąd kompilacji otrzymuję także dla kodu:

        short z, tmp =(short)0x1f;
        z = (y & tmp);

Czyli, to co zauważam, to fakt, iż zawsze otrzymuje komunikat iż drugi operand nie jest typu, takiego jakim ja go deklaruje....

Już się trochę z tym rzutowaniem męczę, a prawdopodobnie nie przeskoczę tego, bo o czymś nie wiem.... dlatego proszę o pomoć; z góry dzięki

Pozdrawiam.

0
x = (short)((x & 0xffffff00) | S);

:-P

http://4programmers.net/Forum/228472?h=java%20byte%20int#228472

0
marcinEc napisał(a)
x = (short)((x & 0xffffff00) | S);

...oj... niestety, gdy tak robiłem to otrzymywałem nieprawidłowe(niepożądane) wyniki. Porównywałem wyniki z ta samą funkcją zaimplementowaną w cpp.

Czy w java'ie operatory bitowe działają tylko na operandach typu int ?????

0

Odpowiedź znajdziesz w specyfikacji języka Java.

Chodzi o fragmenty dotyczące operacji bitowych i promocji typów.
http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5228
oraz
http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#170983

Czyli zamiana deklaracji z short na int powinna rozwiązać Twój problem.

pzdr,
y.

1 użytkowników online, w tym zalogowanych: 0, gości: 1