🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#153926
Author: bigMamma
Date: Wed, 23 Oct 2013 12:22
15 lines
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
#153927
Author: bigMamma
Date: Wed, 23 Oct 2013 12:24
33 lines
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
#153928
Author: Sc0rpi0
Date: Sat, 02 Nov 2013 06:37
30 lines
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
#153929
Author: Sc0rpi0
Date: Sat, 02 Nov 2013 06:58
16 lines
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