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

Tengo un caso simple: Tengo un número entero con algún valor & Quiero convertir ese valor en un byte para la salida. Pero en este caso, viene un valor negativo.Asignando int a byte en java?

¿Cómo puedo colocar con éxito el valor int en el tipo de byte?

+1

Desafortunadamente los bytes en Java están firmados. Todo lo que puede hacer es probar un tipo de datos más grande o una clase personalizada. – missingfaktor

+0

@ user303218: ¿cuál es el rango de valores val? 0-255? – Roman

+0

@Rahul, ¿por qué los bytes firmados son "desafortunados"? –

Respuesta

14

En Java byte el rango es -128 a 127. No es posible almacenar el número entero 233 en un byte sin desbordamiento.

+1

O más bien, puedes, pero estás desbordando el byte. –

14

de Java byte es un 8 bits con signo tipo numérico cuyo rango es -128 a 127 (JLS 4.2.1). 233 está fuera de este rango; el mismo patrón de bits representa -23 en su lugar.

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

Dicho esto, si usted insiste en el almacenamiento de los primeros 8 bits de un int en un byte, entonces byteVariable = (byte) intVariable lo hace. Si necesita devolver esto al int, debe enmascarar cualquier extensión de signo posible (es decir, intVariable = byteVariable & 0xFF;).

5

Si necesita valor de byte sin signo, use b&0xFF.

8

Puede usar 256 valores en un byte, el rango predeterminado es -128 a 127, pero puede representar 256 valores con alguna traducción. En su caso, todo lo que necesita hacer es seguir la sugerencia de enmascarar los bits.

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

Dado que, byte está firmado en la naturaleza por lo tanto, puede almacenar -128 a 127 rango de valores. Después del encasillado, se permite almacenar valores incluso mayores que el rango definido, pero el ciclo del rango definido ocurre de la siguiente manera. cycling nature of range