studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java type-conversion byte add

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í.