I want to know how does following line of code works?
char c = (char) -98;
As per my knowledge all signed numbers are stored in 2's complement form. So -98
will be stored in 2's complement form. So if you type cast it into char. How does this type casting is done by JVM?
Please correct me if I am wrong.
When you write:
char c = (char) -98;
It's the same like writing1:
char c = 65438;
[Because 65438 = 2^16 - 98
]
When explicitly converting an int
to char
, the first 16 bit will be removed.
1 -98 in 2's complement is
11111111111111111111111110011110
.
The casting to char
keeps only 16-bits:
1111111110011110
This value represents 65438..
More reading:
From the documentation:
char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).
Source
They are just 16-bit unsigned integers.
People have reported that if char > 65535
, the result was char % 65536
, so I suppose your char c
will be -98 % 65536
, which would result in 65536 - 98 = 65438
.
Anyway to be 100% sure, why don't you just try it?
UPDATE:
I see that you want to know what the output of System.out.println(char)
(for example) is.
Literals of types char and String may contain any Unicode (UTF-16) characters
Source
So System.out.println((char)65438)
is then equivalent to System.out.println('\uFF9E')
, which by doing a lookup on the UTF-16 encoding table (source) is a HALFWIDTH KATAKANA VOICED SOUND MARK
. It will only be printed though if the font supports this character, one of such fonts is Arial Unicode MS
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With