2010-03-27 33 views
6
int val = 233; 
byte b = (byte) val; 
System.out.println(b); 

Tôi có một trường hợp đơn giản: Tôi có một số nguyên với một số giá trị & Tôi muốn chuyển đổi giá trị đó thành một byte cho đầu ra. Nhưng trong trường hợp này, một giá trị âm sẽ đến.Gán int vào byte trong java?

Tôi có thể đặt giá trị int thành loại byte thành công như thế nào?

+1

Rất tiếc, các byte trong Java được ký. Tất cả những gì bạn có thể làm là thử loại dữ liệu lớn hơn hoặc một lớp tùy chỉnh. – missingfaktor

+0

@ user303218: phạm vi giá trị val là bao nhiêu? 0-255? – Roman

+0

@Rahul, tại sao các byte đã ký "không may"? –

Trả lời

14

Trong Java byte phạm vi là -128 đến 127. Bạn không thể lưu trữ số nguyên 233 trong một byte mà không bị tràn.

+1

Hoặc đúng hơn - bạn có thể, nhưng bạn đang tràn byte. –

14

Java là byte là loại số 8 bit có chữ ký có phạm vi là -128 đến 127 (JLS 4.2.1). 233 nằm ngoài phạm vi này; cùng một mẫu bit đại diện cho -23 thay thế.

11101001 = 1 + 8 + 32 + 64 + 128 = 233 (int) 
      1 + 8 + 32 + 64 - 128 = -23 (byte) 

Điều đó nói rằng, nếu bạn nhấn mạnh vào lưu trữ 8 bit đầu tiên của một int trong một byte, sau đó byteVariable = (byte) intVariable hiện nó. Nếu bạn cần quay lại số này int, bạn phải che dấu bất kỳ dấu mở rộng có thể có nào (nghĩa là, intVariable = byteVariable & 0xFF;).

5

Nếu bạn cần giá trị chưa được ký sử dụng byte b&0xFF.

8

Bạn có thể sử dụng 256 giá trị trong một byte, phạm vi mặc định là -128 đến 127, nhưng nó có thể đại diện cho bất kỳ giá trị 256 nào với một số bản dịch. Trong trường hợp của bạn, tất cả những gì bạn cần làm là làm theo gợi ý che giấu các bit.

int val =233; 
byte b = (byte)val; 
System.out.println(b & 0xFF); // prints 233. 
0

Vì, byte được ký tự nhiên do đó nó có thể lưu trữ -128 đến 127 dải giá trị. Sau khi typecasting nó được phép lưu trữ các giá trị thậm chí lớn hơn phạm vi được xác định nhưng, đi xe đạp của phạm vi được xác định xảy ra như sau. cycling nature of range