2012-03-22 15 views
6

Estoy intentando agregar dos valores en una matriz de bytes. Este es mi código:Agregar bytes con tipo de conversión, Java

byte[] ars = {3,6,9,2,4}; 
ars[0] = (byte)ars[0] + (byte)ars[4]; 
System.out.println(ars[0]); 

consigo este error de compilación:

Main.java:9: possible loss of precision 
found : int 
required: byte 
    ars[0] = (byte)ars[0] + (byte)ars[4]; 
         ^
1 error 

Cualquier ayuda es, como siempre, muy apreciada.

Respuesta

10

cerca, pero un poco apagado.

ars[0] = (byte)(ars[0] + ars[4]); 

tener en cuenta ars[0] y ars[4] ya son bytes, lo que no hay necesidad de echarlos a bytes.

En su lugar, arroje el resultado de la suma a un byte.

+3

Ocurre porque 100 (un byte) + 100 (otro byte) es 200, que no es un byte (en Java, donde los bytes son de -128 a 127). El lanzamiento explícito dice que está bien tirar el "desbordamiento". – Thilo

2

Por favor, vuelva a colocar esa línea con la siguiente

ars[0] = (byte)(ars[0]+ars[4]); 
2
ars[0] = (byte)(ars[0] + ars[4]); 
8

En Java, la suma de dos byte s es un int. Esto se debe a que, por ejemplo, dos números menores de 127 pueden agregarse a un número superior a 127, y Java por defecto usa int s para casi todos los números.

para satisfacer el compilador, vuelva a colocar la línea en cuestión con esto:

ars[0] = (byte)(ars[0] + ars[4]); 
2
byte[] ars = {3,6,9,2,4}; 
     ars[0] = (byte) (ars[0] + ars[4]); 
     System.out.println(ars[0]); 

Esto funcionará, probarlo

4
public static void main(String args[]){ 
    byte[] ars = {3,6,9,2,4}; 
    ars[0] = (byte)(ars[0] + ars[4]); 
    System.out.println(ars[0]); 
} 

esto sucede por la razón que Java convierte automáticamente las expresiones que usa byte y variables cortas para int ... esto es para evitar el riesgo potencial de desbordamiento .... como resultado, incluso si el resultado puede estar en el rango de byte java promueve el tipo de expresión a int

3

me leva a través de esta pregunta hace un tiempo, y se recoge todos los hallazgos aquí: http://downwithjava.wordpress.com/2012/11/01/explanation-to-teaser-2/

Todos sabemos bytes se convierten a enteros durante una operación aritmética. Pero, ¿por qué sucede esto? Porque JVM no tiene instrucciones aritméticas definidas para bytes. las variables del tipo de byte deben agregarse primero 'promocionándolas numéricamente' a tipo 'int', y luego agregando. ¿Por qué no hay instrucciones aritméticas para el tipo de byte en JVM? La especificación JVM dice claramente:

La máquina virtual Java proporciona el soporte más directo para datos de tipo int. Esto se debe en parte a la anticipación de las implementaciones eficientes de las pilas de operandos de la máquina virtual Java y las matrices de variables locales. También está motivado por la frecuencia de datos int en programas típicos. Otros tipos integrales tienen menos soporte directo. No hay byte, char o versiones cortas de la tienda, carga o agrega instrucciones, por ejemplo.

+2

las respuestas de solo enlace generalmente son desaprobadas. – David

+0

Bienvenido a StackOverflow. Según lo sugerido por David, generalmente es mejor que las respuestas sean al menos algo independientes.Simplemente brinde un resumen rápido aquí y proporcione las conclusiones esenciales. – phant0m

+0

@DavidStratton editó la respuesta. –

Cuestiones relacionadas