I have an array of short whose values range between 0 and the maximum value of a short. I scale the data (to display it as TYPE_USHORT) so that the resulting short values range between 0 and 65535. I need to print some of the scaled values but can't figure out how. The data are in an array and in a BufferedImage.
Asked
Active
Viewed 1.7k times
2 Answers
34
The simplest way is to convert to int:
short s = ...;
int i = s & 0xffff;
The bitmask is to make the conversion give a value in the range 0-65535 rather than -32768-32767.

Jon Skeet
- 1,421,763
- 867
- 9,128
- 9,194
-
Quite effective, but less readable than `Short.toUnsignedInt()`. – scottb Mar 19 '21 at 06:01
-
@scottb: True - that only became available about four years after the answer was written though :) – Jon Skeet Mar 19 '21 at 07:47
23
Since Java 1.8, the same can be done with Short.toUnsignedInt
:
System.out.println("signed s=" + s + ", unsigned s=" + Short.toUnsignedInt(s))

keplerian
- 512
- 1
- 8
- 19

jurek sokolowski
- 231
- 2
- 4