Panduan lengkap untuk bekerja dengan byte yang tidak ditandatangani di Jawa:
(Sumber untuk jawaban ini.)
Bahasa Jawa tidak menyediakan apa pun seperti unsigned
kata kunci. A byte
sesuai dengan spesifikasi bahasa mewakili nilai antara −128 - 127. Misalnya, jika byte
dilemparkan ke int
Java akan menafsirkan bit pertama sebagai tanda dan menggunakan ekstensi tanda .
Yang sedang berkata, tidak ada yang mencegah Anda dari melihat byte
hanya sebagai 8 bit dan menafsirkan bit-bit itu sebagai nilai antara 0 dan 255. Perlu diingat bahwa tidak ada yang dapat Anda lakukan untuk memaksa interpretasi Anda pada metode orang lain. Jika suatu metode menerima a byte
, maka metode itu menerima nilai antara −128 dan 127 kecuali secara eksplisit dinyatakan sebaliknya.
Berikut adalah beberapa konversi / manipulasi yang berguna untuk kenyamanan Anda:
Konversi ke / dari int
// From int to unsigned byte
int i = 200; // some value between 0 and 255
byte b = (byte) i; // 8 bits representing that value
// From unsigned byte to int
byte b = 123; // 8 bits representing a value between 0 and 255
int i = b & 0xFF; // an int representing the same value
(Atau, jika Anda menggunakan Java 8+, gunakan Byte.toUnsignedInt
.)
Parsing / pemformatan
Cara terbaik adalah dengan menggunakan konversi di atas:
// Parse an unsigned byte
byte b = (byte) Integer.parseInt("200");
// Print an unsigned byte
System.out.println("Value of my unsigned byte: " + (b & 0xFF));
Aritmatika
Representasi 2-pelengkap "hanya berfungsi" untuk penambahan, pengurangan, dan penggandaan:
// two unsigned bytes
byte b1 = (byte) 200;
byte b2 = (byte) 15;
byte sum = (byte) (b1 + b2); // 215
byte diff = (byte) (b1 - b2); // 185
byte prod = (byte) (b2 * b2); // 225
Divisi membutuhkan konversi manual dari operan:
byte ratio = (byte) ((b1 & 0xFF) / (b2 & 0xFF));