JavaRush /Blog Java /Random-ES /Fundición de tipos primitivos. Convertir int a short y by...
Георгий
Nivel 22
Санкт-Петербург

Fundición de tipos primitivos. Convertir int a short y byte

Publicado en el grupo Random-ES
Fundición de tipos primitivos.  Convertir int a short y byte - 1¿Por qué si conviertes algunos valores de tipo inten type shorto byte, los resultados son inesperados? ¡Vamos a averiguar!
int i = 450;
byte b = (byte)i;
System.out.println(b);
Resultado en pantalla:

-62
Inesperadamente, esto tiene una explicación lógica, además, esta acción se puede realizar con sus propias manos. Para hacer esto, necesitamos convertir 450 de decimal a binario:

450/2.    0
225/2.    1
112/2.    0
56/2.     0
28/2.     0
14/2.     0
7/2.      1
3/2.      1
1/2.      1
En la columna derecha del número escribimos su resto al dividirlo por 2, y debajo del número mismo escribimos el resultado de dividir nuestro número entre dos, si el resto es 0. Si el resto es 1, debajo escribimos el parte entera de la división por dos. ( Calculadora online con explicación de cálculos ). Como resultado, obtenemos que en el sistema numérico binario 450 = 11100 0010. Cualquier tipo de número intocupa 4 bytes o 32 bits, donde cada bit es 0 o 1. En nuestro caso, solo se ocupan 9 bits, y en principio el nuestro int i = 450en sistema binario se ve así:

0000_0000_0000_0000_0000_0001_1100_0010
Queremos escribir nuestra variable en una variable de tipo byte, pero el número de tipo byteocupa 1 byte (como se desprende del nombre de este tipo) u 8 bits. Por lo tanto, los bits sobrantes de la izquierda simplemente se descartan y al final obtenemos:

1100 0010
Rango de valores de tipo byte: -128 a 127. Cada número ocupa 8 bits y el bit más a la izquierda de cada número es el bit de signo. Para todos los números positivos es igual a 0, para todos los números negativos es igual a 1. No hay necesidad de apresurarse a convertir nuestro resultado obtenido anteriormente al décimo sistema, porque Recibimos un código adicional para el número deseado, no uno directo. El bit más a la izquierda resultó ser igual a 1, por lo tanto nuestro número es negativo, y para los números negativos los códigos directo e inverso no coinciden, a diferencia de los positivos. Si el bit de signo fuera igual a 0, entonces podríamos convertir inmediatamente el número al sistema numérico decimal y obtener: 66. Pero el bit de signo es negativo, por lo que primero debemos convertir el código adicional en uno directo y agregar un signo menos. firme la respuesta. Para mayor claridad y capacitación, primero intentemos obtener el código adicional de algún número, por ejemplo -15. Para hacer esto, en el código directo de su representación positiva (número 15), debe cambiar todos los 0 a 1 y viceversa (obtenga el código inverso, también llamado inverso) y luego agregar uno al resultado. En el sistema decimal 15 = 0000 1111; Código inverso (cambia todos los 0 por 1 y viceversa) = 1111 0000; Código adicional (agregue uno):

1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 1
1 1 1 1 0 0 0 1
Código adicional para el número -15: 1111 0001; Genial. Ahora, por analogía con el ejemplo anterior, necesitamos convertir nuestro código adicional en código directo; déjame recordarte que es igual a 1100 0010.
  1. Resta uno y obtén el código inverso. Es conveniente hacer esto, escribir un código adicional en la respuesta y ver a qué necesita agregar uno para obtener dicho código adicional. Comenzamos con el dígito más a la derecha y miramos: ¿a qué necesitamos sumarle 1 para obtener 0? A 1, obtenemos 10, 0 va en respuesta y 1 pasa al siguiente dígito. A continuación, lo que hay que sumar a 0 para obtener uno. Uno, pero como tenemos un uno del dígito anterior, escribimos como respuesta 0. A continuación, para obtener 0, ¿qué debemos sumar a 0? Por supuesto, 0. Entonces 4 veces más. Y quedan los últimos 2 dígitos, donde debes sumar algo a 0 para obtener 1. Por supuesto, en ambos casos debes sumar 1. Total:

    
    1 1 0 0 0 0 0 1
    0 0 0 0 0 0 0 1
    1 1 0 0 0 0 1 0
  2. ¡La parte más difícil ha terminado! Hemos recibido el código inverso (inverse) y lo único que tenemos que hacer es conseguir el directo. Invertimos todo 0 a 1 y viceversa:

    1100 0001- código inverso;

    0011 1110 - el código directo de nuestro número, o más bien su representación positiva;

  3. Convertir al sistema numérico decimal ( Calculadora en línea con explicación de cálculos ):

    0011 1110 = 0∙2^7+0∙2^6+1∙2^5+1∙2^4+1∙2^3+1∙2^2+1∙2^1+0∙2^0 = 0+0+32+16+8+4+2+0 = 62;

    Todo lo que queda es sumar un menos al número y nuestra respuesta:-62.

De la misma manera, los números de tipo se convierten shorta tipo int:
int i = 10_000_000;
short s = (short)i;
System.out.println(s); // -27008
  1. 10.000.000 en el décimo sistema numérico = 0000 0000 1001 1000 1001 0110 1000 0000en el segundo sistema numérico.

    En Java, un número de tipo intocupa 4 bytes y un shortnúmero de tipo ocupa 2 bytes, o 16 bits, por lo que cortamos la izquierda a 16 dígitos:

  2. 1001 0110 1000 0000. El bit más a la izquierda (el bit más significativo, también conocido como bit de signo) resultó ser igual a 1. Esto significa que tenemos un código adicional para un número negativo, por lo que pasamos al siguiente punto.
  3. Traducámoslo al código inverso:

    
    1 0 0 1 0 1 1 0 0 1 1 1 1 1 1 1
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
    1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0

    Código de retorno: 1001 0110 0111 1111;

  4. Invertimos y obtenemos el código directo: 0110 1001 1000 0000.

  5. Convertimos al sistema numérico binario y obtenemos una representación positiva de nuestro número:

    1∙2^14+1∙2^13+1∙2^11+1∙2^8+1∙2^7 = 16384+8192+2048+256+128 = 27008.
  6. Agregue un menos y obtenga la respuesta:-27008

Fundición de tipos primitivos.  Convertir int a short y byte - 2Enlace a una calculadora en línea de códigos directos, inversos y complementarios. También en este sitio, debajo de la calculadora, hay una pequeña teoría sobre el código inverso y complemento.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION