Thread View: pl.comp.lang.java
4 messages
4 total messages
Started by bigMamma
Wed, 23 Oct 2013 12:22
przesunięcie biotwe w Java - dziwny błąd
Author: bigMamma
Date: Wed, 23 Oct 2013 12:22
Date: Wed, 23 Oct 2013 12:22
15 lines
1540 bytes
1540 bytes
wydawało mi się (przy moim ostatnim temacie), że przesunięcie bitowe działa prawidłowo.
Mam takie wyrażenie:
short w = (short) (((byte)dana) << x);
... String.format("%04X",w);
jeżeli dana zawiera (byte) 0x88
a x = 5
to otrzymuję F100
zamiast 1100
Jak mogę to zmienić, aby było poprawnie!
Re: przesunięcie biotwe w Java - dziwny błąd
Author: bigMamma
Date: Wed, 23 Oct 2013 12:24
Date: Wed, 23 Oct 2013 12:24
33 lines
2011 bytes
2011 bytes
W dniu środa, 23 października 2013 14:22:27 UTC+2 użytkownik bigMamma napisał:
> wydawało mi się (przy moim ostatnim temacie), że przesunięcie bitowe działa prawidłowo.
>
>
>
> Mam takie wyrażenie:
>
> short w = (short) (((byte)dana) << x);
>
>
>
> ... String.format("%04X",w);
>
>
>
> jeżeli dana zawiera (byte) 0x88
>
> a x = 5
>
>
>
> to otrzymuję F100
>
>
>
> zamiast 1100
>
>
>
> Jak mogę to zmienić, aby było poprawnie!
ach! x to int.
Re: przesunięcie biotwe w Java - dziwny błąd
Author: Sc0rpi0
Date: Sat, 02 Nov 2013 06:37
Date: Sat, 02 Nov 2013 06:37
30 lines
1813 bytes
1813 bytes
> Mam takie wyrażenie:
>
> short w = (short) (((byte)dana) << x);
> ... String.format("%04X",w);
>
> jeżeli dana zawiera (byte) 0x88
>
> a x = 5
>
> to otrzymuję F100
>
> zamiast 1100
>
>ach! x to int.
Akurat to nieistotne czy x to int bo to przesunięcie - natomiast co do danej
cokolwiek mniejszego od inta jest zamieniane na int przy uzyciu operatora
<<, więc (byte) w tym miejscu i tak nie ma sensu, a wynik w tym przykładzie
też jest intem. Poza tym jeżeli tak by to miało być jak w zamierzeniu (wg
mojego przypuszczenia) to wynik powinien być 0 a nie 0x1100 (byte ma 8 bitow
ze znakiem). Żeby zrobić to co wydaje mi się, że miało być to:
short w = (short)(byte)(dana<<x);
z wynikiem 0, a aby dostać 0x1100 to po prostu:
short w = (short)(dana<<x);
Re: przesunięcie biotwe w Java - dziwny błąd
Author: Sc0rpi0
Date: Sat, 02 Nov 2013 06:58
Date: Sat, 02 Nov 2013 06:58
16 lines
1434 bytes
1434 bytes
> Żeby zrobić to co wydaje mi się, że miało być to: > > short w = (short)(byte)(dana<<x); Chociaż w sumie tak też nie, jeżeli nie chcesz rozszerzać wyników ze znakiem (ujemnych), tylko: short w = (short)(dana<<x&255); natomiast na pewno nie uzywać ((byte)dana)<<x, bo najpierw potraktuje jako ujemną 8bitową i zamieni na FFFFFF88 przed przesunięciem. -- Sc0rpi0
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads