Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using char as an unsigned 16 bit value in Java?

I need an unsigned 8 bit integer in Java, and char seems to be the only thing close to that. Although it's double the size, it's unsigned which makes it practical for what I want to use it for (writing a basic emulator which requires unsigned bytes). The problem is that I've heard other programmers say that one shouldn't use char in that manner and should just use int or so. Is this true, and why so?

like image 232
ZimZim Avatar asked Aug 06 '26 17:08

ZimZim


2 Answers

If you need an unsigned 8 bit integer then use byte. It's easy to make it unsigned in arithemtic operations (where actually sign matters) as byteValue & 0xFF

like image 197
Evgeniy Dorofeev Avatar answered Aug 08 '26 17:08

Evgeniy Dorofeev


In Java:

long: [-2^63 , 2^63 - 1]

int: [-2^31 , 2^31 - 1]

short: [-2^15 , 2^15 - 1]

byte: [-2^7 , 2^7 - 1]

char: [0 , 2^16 - 1]

You want an unsigned 8 bit integer means you want a value between [0, 2^8 - 1]. It is clearly to choose short/int/long/char.

Although char can be treated as an unsigned integer, I think It's a bad coding style to use char for anything but characters.

For example,

public class Test {
public static void main(String[] args) {
    char a = 3;
    char b = 10;

    char c = (char) (a - b);
    System.out.println((int) c); // Prints 65529
    System.out.println((short) c); // Prints -7

    short d = -7;
    System.out.println((int) d); // Prints -7, Please notice the difference with char
}

}

It is better to use short/int/long with conversion.

like image 21
Le Wang Avatar answered Aug 08 '26 15:08

Le Wang



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!