programacion - Tipo de transmisión de bytes en Java
manual de programacion android pdf (4)
el programa me da una pérdida de error de precisión, pero no puedo pensar en ninguna pérdida de precisión ya que los números son pequeños
Este es el código ##
class Demo
{
public static void main(String args[])
{
byte b1=3;
byte b2=2;
byte b3=b1+b2;
System.out.println(b3);
}
}
La expresión de adición b1 + b2
es de tipo int
; no hay operadores adicionales definidos en tipos más pequeños que int
. Entonces, para convertir eso a un byte
, debes lanzar:
byte b3 = (byte) (b1 + b2);
Tenga en cuenta que aunque sepa que los valores son pequeños, al compilador no le importan los valores que ha establecido en las dos líneas anteriores; ambos podrían ser 100 por lo que sabe. Del mismo modo, aunque sabes que la int
que intentas asignar a una variable de byte
es solo el resultado de agregar dos valores de byte
juntos (o más bien, dos valores promocionados de byte
a int
), la expresión como un todo es solo int
y podría han venido de cualquier parte en lo que se refiere al lenguaje.
(El hecho de que la suma puede desbordarse es una cuestión aparte, pero ese sería un argumento inconsistente; después de todo, puede agregar dos valores int
juntos y almacenar el resultado en una variable int
, aunque la adición podría haberse desbordado fácilmente).
Porque 127 es el último valor de byte. Supongamos que b1 = 127 y b2 = 2
ahora lo que sucede b = b1 + b2 = 129 [que está fuera del rango de bytes, es decir, está dentro del rango]
ahora si lo lanzas b = (byte) (b1 + b2), obtendrás -127, esto se debe al redondeo del valor a byte.
cuando alguna vez hace +, -, *, /,% java usa internamente una función
ex: max (int, dataType of operand 1, dataType of operand 2);
aquí en tu código
max (int, byte, byte) ==> ¿cuál es más grande? ==> int es más grande
para que pueda obtener POSIBLE PÉRDIDA DE PRESSIÓN
encontrado: int
requerido: byte
Otro ejemplo
short a =10;
byte b=20;
short c = a+b;
ahora:
internamente: max (int, OP1, OP2);
es decir, max (int, short, byte) ==> ¿cuál es el tipo de datos más grande? En t
por lo que java exceptts int
int c = a+b; (works fine)
Otro ejemplo :
long a =10;
byte b=20;
short c = a+b;
ahora:
internamente: max (int, OP1, OP2);
es decir, max (int, long, byte) ==> ¿cuál es el tipo de datos más grande? largo
entonces java excepts long
long c = a+b;(works fine)
Otro ejemplo:
byte b = 10;
b = b+1;
ahora,
max (int, byte) ==> ¿cuál es el tipo de datos más grande? En t
asi que,
int c = b+1;(works fine) or b = (byte) b+1;
espero que entiendas
byte b1=3;
byte b2=2;
byte b3=b1+b2; // you can''t use byte here, Every time addition will result
int value
Porque, si intenta lanzar un int que es más grande que el rango de bytes, hay una pérdida de ese valor. Entonces, la adición no permitirá el uso de byte aquí.