Meskipun sudah terlambat, saya ingin memberikan masukan tentang hal ini karena mungkin dapat menjelaskan mengapa solusi yang diberikan oleh JB Nizet berhasil. Saya menemukan masalah kecil ini bekerja pada pengurai byte dan konversi string sendiri. Ketika Anda menyalin dari tipe integral berukuran lebih besar ke tipe integral berukuran lebih kecil seperti yang dikatakan dokumen java ini:
https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3
Konversi yang dipersempit dari bilangan bulat bertanda ke tipe integral T hanya membuang semua kecuali n terendah order bits, di mana n adalah jumlah bit yang digunakan untuk merepresentasikan tipe T. Selain kemungkinan hilangnya informasi tentang besarnya nilai numerik, hal ini dapat menyebabkan tanda nilai yang dihasilkan berbeda dari tanda nilai masukan. .
Anda dapat yakin bahwa byte adalah tipe integral seperti yang dikatakan dokumen java ini
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
byte: Tipe data byte adalah 8-bit bertanda dua melengkapi integer.
Jadi dalam kasus casting integer (32 bit) menjadi byte (8 bit), Anda cukup menyalin yang terakhir (8 bit paling tidak signifikan) dari integer itu ke variabel byte yang diberikan.
int a = 128;
byte b = (byte)a;
System.out.println(b);
Bagian kedua dari cerita ini melibatkan bagaimana Java unary dan operator biner mempromosikan operan.
https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2
Konversi primitif pelebaran (§5.1.2) diterapkan untuk mengonversi salah satu atau kedua operan seperti yang ditentukan dengan aturan berikut:
Jika salah satu operan berjenis double, operan lainnya akan diubah menjadi double.
Sebaliknya, jika salah satu operand berjenis float, yang lain akan diubah menjadi float.
Sebaliknya, jika salah satu operan berjenis long, operan lainnya akan diubah menjadi long.
Jika tidak, kedua operan akan diubah menjadi tipe int.
Yakinlah, jika Anda bekerja dengan tipe integral int dan / atau lebih rendah itu akan dipromosikan menjadi int.
a = b & 0xFF;
System.out.println(a);
Saya menggaruk-garuk kepala saya di sekitar ini juga :). Ada jawaban bagus untuk ini di sini oleh rgettman.
Operator bitwise di java hanya untuk integer dan long?