1 00:00:00,110 --> 00:00:02,370 Seguimos 2 00:00:02,370 --> 00:00:05,980 Bueno, pues entonces 3 00:00:05,980 --> 00:00:08,339 Esto ya no nos tiene que asustar 4 00:00:08,339 --> 00:00:08,599 ¿Vale? 5 00:00:10,039 --> 00:00:12,279 Luego, conclusión grabadísima 6 00:00:12,279 --> 00:00:14,480 Del funcionamiento de asignación de variables 7 00:00:14,480 --> 00:00:15,720 Ahora mismo 8 00:00:15,720 --> 00:00:18,239 Incluso a los que no habéis programado 9 00:00:18,239 --> 00:00:20,079 Os puede parecer que lo que estamos diciendo es trivial 10 00:00:20,079 --> 00:00:21,739 Pero hacedme caso 11 00:00:21,739 --> 00:00:23,660 Luego, de nuevo generalizando 12 00:00:23,660 --> 00:00:25,000 Hacéis unas burradas 13 00:00:25,000 --> 00:00:27,280 Pero es que de escándalo 14 00:00:27,280 --> 00:00:28,440 Y cuando pregunto 15 00:00:28,440 --> 00:00:30,519 ¿Pero tú te das cuenta de esto que has hecho? 16 00:00:30,640 --> 00:00:31,859 ¿Me dais unas explicaciones? 17 00:00:31,940 --> 00:00:34,640 que todavía son más de escándalo 18 00:00:34,640 --> 00:00:36,859 generalizando 19 00:00:36,859 --> 00:00:38,079 generalizando 20 00:00:38,079 --> 00:00:39,359 de verdad 21 00:00:39,359 --> 00:00:41,840 que pasa muchísimo 22 00:00:41,840 --> 00:00:43,859 y yo tengo dos opciones 23 00:00:43,859 --> 00:00:46,359 o asesinaros que no puedo 24 00:00:46,359 --> 00:00:47,359 porque no es legal 25 00:00:47,359 --> 00:00:49,600 o desesperarme 26 00:00:49,600 --> 00:00:52,520 que trato de evitarlo 27 00:00:52,520 --> 00:00:54,479 o a costa 28 00:00:54,479 --> 00:00:55,759 de que os parezca trivial 29 00:00:55,759 --> 00:00:58,079 insistir una y otra vez para que se os queden 30 00:00:58,079 --> 00:01:00,420 las ideas de base de concepto claras 31 00:01:00,420 --> 00:01:03,840 ¿Vale? Entonces, ahora, ¿qué tiene que quedar clarísimo? 32 00:01:04,280 --> 00:01:13,939 Que en una asignación que solo tiene esta opción sintáctica, la máquina virtual, primero, coge este valor. 33 00:01:14,540 --> 00:01:17,579 El valor puede ser un número suelto, estupendo, lo tiene muy fácil. 34 00:01:19,000 --> 00:01:25,579 Pero puede no ser un número suelto, sino que puede ser el resultado de una expresión matemática o lógica. 35 00:01:25,579 --> 00:01:33,200 lógica, ¿vale? En este caso yo he puesto un ejemplo de expresión aritmética, una suma, ¿vale? Pero las 36 00:01:33,200 --> 00:01:37,799 expresiones pueden ser mucho más complicadas, entonces tendremos que, cuando veamos un poquito 37 00:01:37,799 --> 00:01:44,040 ya más o menos cómo funcionan todos los tipos de variables, ya nos meteremos un poquito más en cómo 38 00:01:44,040 --> 00:01:50,180 construir expresiones válidas, todos los operadores que tenemos, los lógicos, los aritméticos, etcétera. 39 00:01:50,180 --> 00:01:53,140 pero quede desde ya la idea 40 00:01:53,140 --> 00:01:55,299 de que lo que se pone a la derecha es un valor 41 00:01:55,299 --> 00:01:58,420 y ese valor puede ser un valor que yo he metido tal cual 42 00:01:58,420 --> 00:02:02,319 sea por teclado con la sentencia que ya veremos 43 00:02:02,319 --> 00:02:04,200 o porque lo he metido tal cual, el 9 44 00:02:04,200 --> 00:02:07,959 puede ser un valor tal cual o puede ser el resultado 45 00:02:07,959 --> 00:02:10,759 de una expresión aritmética o lógica 46 00:02:10,759 --> 00:02:14,580 bueno, pues la máquina virtual evaluará 47 00:02:14,580 --> 00:02:17,340 esa expresión y cuando ya tenga el valor final 48 00:02:17,340 --> 00:02:32,819 Y solo cuando tenga el valor final ya se va y dice, ¿en qué cajita la tengo que meter? En la cajita que se llama número 1. Estupendo, ahí meto el valor resultante de evaluar esta expresión, ¿vale? 49 00:02:32,819 --> 00:02:35,199 y de nuevo 50 00:02:35,199 --> 00:02:36,759 en esta expresión 51 00:02:36,759 --> 00:02:38,919 la siguiente cosa que ya se nos tiene que quedar grabada 52 00:02:38,919 --> 00:02:39,860 ya para siempre 53 00:02:39,860 --> 00:02:42,379 es que en esta expresión puede haber 54 00:02:42,379 --> 00:02:44,840 números tal cual que yo meto 55 00:02:44,840 --> 00:02:46,919 o puede haber 56 00:02:46,919 --> 00:02:49,039 también contenidos de otras 57 00:02:49,039 --> 00:02:50,699 variables, puede haber también 58 00:02:50,699 --> 00:02:51,879 contenidos de otras variables 59 00:02:51,879 --> 00:02:54,939 entonces cuando yo quiera que haya contenidos de otras 60 00:02:54,939 --> 00:02:56,780 variables, pues pondré el nombre 61 00:02:56,780 --> 00:02:58,879 porque así me refiero yo al contenido 62 00:02:58,879 --> 00:03:00,599 de una variable, con su nombre 63 00:03:00,599 --> 00:03:02,419 y esta expresión 64 00:03:02,419 --> 00:03:05,879 Puede ser hiper mega compleja 65 00:03:05,879 --> 00:03:07,180 Y hacer mil cosas 66 00:03:07,180 --> 00:03:08,780 Y mil historias 67 00:03:08,780 --> 00:03:11,300 ¿Vale? Con un montón de variables 68 00:03:11,300 --> 00:03:12,379 Con las que haga falta 69 00:03:12,379 --> 00:03:15,659 Número 2, número 3 70 00:03:15,659 --> 00:03:17,919 Bueno, es que con número 3 era long 71 00:03:17,919 --> 00:03:19,199 ¿Vale? No, pero bueno 72 00:03:19,199 --> 00:03:20,500 Con las variables que sea 73 00:03:20,500 --> 00:03:25,039 Sí, ahora vamos por partes 74 00:03:25,039 --> 00:03:27,580 Vamos por partes, ¿vale? 75 00:03:27,780 --> 00:03:30,000 Esta primera parte de la asignatura 76 00:03:30,000 --> 00:03:32,080 Es un poco más rollo 77 00:03:32,080 --> 00:03:33,819 Porque claro, todo esto son 78 00:03:33,819 --> 00:03:35,719 pequeños cositas 79 00:03:35,719 --> 00:03:37,620 que hay que introducir, pequeños matices 80 00:03:37,620 --> 00:03:39,060 que hay que introducir 81 00:03:39,060 --> 00:03:41,979 que no podemos todos, es imposible 82 00:03:41,979 --> 00:03:43,800 pero bueno, lo suficiente es para 83 00:03:43,800 --> 00:03:44,979 sobrevivir 84 00:03:44,979 --> 00:03:50,099 significa esto 85 00:03:50,099 --> 00:03:51,740 que este número que va adelante 86 00:03:51,740 --> 00:03:54,319 lo tiene que guardar la máquina 87 00:03:54,319 --> 00:03:56,099 virtual en 64 bits 88 00:03:56,099 --> 00:03:58,060 porque si no le pones la L 89 00:03:58,060 --> 00:03:59,639 lo guarda en 32, problema 90 00:03:59,639 --> 00:04:00,960 que no le cabe 91 00:04:00,960 --> 00:04:02,439 ¿vale? 92 00:04:02,439 --> 00:04:04,280 vale 93 00:04:04,280 --> 00:04:06,159 bueno, pues entonces 94 00:04:06,159 --> 00:04:08,060 estábamos diciendo 95 00:04:08,060 --> 00:04:10,979 que esta expresión que se pone a la derecha 96 00:04:10,979 --> 00:04:13,039 puede involucrar tropecientas 97 00:04:13,039 --> 00:04:14,800 variables y lo que haga falta 98 00:04:14,800 --> 00:04:16,680 puede involucrar cualquier cosa, vale 99 00:04:16,680 --> 00:04:22,209 vale, a ver 100 00:04:22,209 --> 00:04:25,129 voy a modificar 101 00:04:25,129 --> 00:04:28,149 tengo yo aquí esta expresión 102 00:04:28,149 --> 00:04:29,930 puesta, por ejemplo, ya que he puesto esta 103 00:04:29,930 --> 00:04:31,370 tan tonta y tan rara 104 00:04:31,370 --> 00:04:33,970 la voy a dejar, vale 105 00:04:33,970 --> 00:04:35,709 Tengo esta expresión 106 00:04:35,709 --> 00:04:38,269 Silencio 107 00:04:38,269 --> 00:04:42,819 Pierdo el hilo si habláis 108 00:04:42,819 --> 00:04:44,360 Vale 109 00:04:44,360 --> 00:04:46,079 Tengo esta expresión 110 00:04:46,079 --> 00:04:47,939 Que involucra unas cuantas variables 111 00:04:47,939 --> 00:04:50,120 No hay ningún problema, ya sabemos que una expresión 112 00:04:50,120 --> 00:04:51,860 Puede involucrar toda la variable que yo quiera 113 00:04:51,860 --> 00:04:54,279 Vale, pero voy a cambiar un poquito mi código 114 00:04:54,279 --> 00:04:56,720 Y con el cambio que voy a hacer 115 00:04:56,720 --> 00:04:58,639 Pues ya, claro, me vais a contestar 116 00:04:58,639 --> 00:04:59,920 Todos, lógicamente 117 00:04:59,920 --> 00:05:02,759 Voy a cambiar aquí mi código 118 00:05:02,759 --> 00:05:04,540 No quiero asignarle nada a número 119 00:05:04,540 --> 00:05:07,139 la he declarado, está aquí declarada 120 00:05:07,139 --> 00:05:09,339 y de repente 121 00:05:09,339 --> 00:05:11,480 ha aparecido aquí un error de compilación 122 00:05:11,480 --> 00:05:13,000 ¿vale? 123 00:05:13,899 --> 00:05:15,500 ahora, sin necesidad de que yo 124 00:05:15,500 --> 00:05:17,500 ponga en la manita para que me diga 125 00:05:17,500 --> 00:05:18,980 el error de compilación de Java C 126 00:05:18,980 --> 00:05:21,319 me diríais 127 00:05:21,319 --> 00:05:22,939 ¿y por qué de repente esto 128 00:05:22,939 --> 00:05:25,600 se me ha puesto en rojo y esto no compila? 129 00:05:26,500 --> 00:05:27,300 la línea 130 00:05:27,300 --> 00:05:29,259 es la misma que estaba antes 131 00:05:29,259 --> 00:05:30,540 yo no la he modificado 132 00:05:30,540 --> 00:05:33,300 y esto es sintácticamente 133 00:05:33,300 --> 00:05:35,319 válido, todas estas variables 134 00:05:35,319 --> 00:05:37,199 existen, están declaradas 135 00:05:37,199 --> 00:05:39,399 los operadores son válidos, eso lo digo 136 00:05:39,399 --> 00:05:41,500 desde ya, pues el más, la división 137 00:05:41,500 --> 00:05:43,360 el menos, son operadores aritméticos que siempre 138 00:05:43,360 --> 00:05:45,560 se pueden usar y de repente ha aparecido 139 00:05:45,560 --> 00:05:46,699 ese error de compilación 140 00:05:46,699 --> 00:05:48,300 vale 141 00:05:48,300 --> 00:05:50,339 pues ¿por qué ha aparecido? 142 00:05:51,980 --> 00:05:53,019 claro, porque 143 00:05:53,019 --> 00:05:54,100 importante 144 00:05:54,100 --> 00:05:57,319 si ponéis aquí la manita 145 00:05:57,319 --> 00:05:59,339 lo dice número, no tiene ningún valor 146 00:05:59,339 --> 00:06:01,000 vale, pues importante 147 00:06:01,000 --> 00:06:03,160 cuando tenemos aquí 148 00:06:03,160 --> 00:06:05,120 una expresión que involucra variables 149 00:06:05,120 --> 00:06:07,000 que hace la máquina virtual. 150 00:06:07,139 --> 00:06:09,579 Ya lo hemos dicho. Se pone a hacer los cálculos. 151 00:06:09,879 --> 00:06:11,399 Evalúa esa expresión para obtener 152 00:06:11,399 --> 00:06:13,240 el valor. Se pone a hacer cálculos. 153 00:06:13,959 --> 00:06:15,420 Entonces, con los números tal cual 154 00:06:15,420 --> 00:06:16,160 no tiene problemas. 155 00:06:17,079 --> 00:06:19,560 Y con las variables que hace, se va a la cajita 156 00:06:19,560 --> 00:06:20,519 a recoger lo que tenga. 157 00:06:21,319 --> 00:06:22,779 Si en la cajita no hay nada, 158 00:06:24,100 --> 00:06:25,300 pues no hay nada que vamos a hacer. 159 00:06:25,399 --> 00:06:26,680 Pues nos quedamos con las ganas. 160 00:06:26,879 --> 00:06:29,240 Y entonces, dice, 161 00:06:29,240 --> 00:06:31,699 lo siento, no puedo evaluar esa expresión. 162 00:06:32,079 --> 00:06:32,439 No puedo. 163 00:06:33,160 --> 00:06:51,660 ¿Vale? ¿Está el error en esta línea? No, el error no está en esta línea, el error está en otra parte del programa. Entonces, los errores de compilación no están normalmente en la línea donde salen, están en otra parte del programa que ha provocado que esa línea no pueda compilar correctamente. 164 00:06:51,660 --> 00:06:54,199 Bueno, en este caso nos lo decía bien la derecha 165 00:06:54,199 --> 00:06:55,660 Número no está inicializado 166 00:06:55,660 --> 00:06:57,519 Vale, pues no pasa nada 167 00:06:57,519 --> 00:06:58,800 Venga 168 00:06:58,800 --> 00:07:02,779 Ah, es que me he equivocado y yo quería número darle 7 169 00:07:02,779 --> 00:07:03,339 Ya está 170 00:07:03,339 --> 00:07:06,399 En cuanto ya le doy un valor a número 171 00:07:06,399 --> 00:07:08,100 Ya está 172 00:07:08,100 --> 00:07:09,579 Estupendo, vale, compila 173 00:07:09,579 --> 00:07:11,500 Bueno 174 00:07:11,500 --> 00:07:14,870 Seguimos 175 00:07:14,870 --> 00:07:17,750 Lo que me estabais diciendo 176 00:07:17,750 --> 00:07:19,129 Estamos todavía 177 00:07:19,129 --> 00:07:22,089 Con uso de variables enteras 178 00:07:22,089 --> 00:07:24,230 en Java y cuestiones relacionadas 179 00:07:24,230 --> 00:07:25,490 con la asignación de valores 180 00:07:25,490 --> 00:07:28,189 de números enteros a variables, estamos todavía con eso 181 00:07:28,189 --> 00:07:29,290 variables enteros 182 00:07:29,290 --> 00:07:32,089 seguimos, justo en relación a lo que 183 00:07:32,089 --> 00:07:33,930 decíais antes, jolín 184 00:07:33,930 --> 00:07:35,930 son intercambiables, si yo tengo una variable 185 00:07:35,930 --> 00:07:37,850 entera, le puedo asignar una variable 186 00:07:37,850 --> 00:07:40,089 ¿cómo puedo hacer eso? 187 00:07:40,110 --> 00:07:41,370 ¿hay alguna regla? ¿hay algún no sé qué? 188 00:07:42,810 --> 00:07:44,009 bueno, pues ahí la natural 189 00:07:44,009 --> 00:07:46,250 la que no se le ocurriría, porque al fin y al cabo 190 00:07:46,250 --> 00:07:47,990 un lenguaje de programación está 191 00:07:47,990 --> 00:07:50,089 para hacer cosas de la vida real 192 00:07:50,089 --> 00:07:51,050 no está para otra cosa 193 00:07:51,050 --> 00:07:53,990 todo lo que nos afecta a nosotros 194 00:07:53,990 --> 00:07:56,170 todo está en el mundo real 195 00:07:56,170 --> 00:07:57,810 entonces cualquier cosa 196 00:07:57,810 --> 00:07:59,949 de la que la tecnología se ocupa 197 00:07:59,949 --> 00:08:01,189 está obviamente 198 00:08:01,189 --> 00:08:03,589 directamente relacionada con solucionar 199 00:08:03,589 --> 00:08:04,910 problemas de la vida real 200 00:08:04,910 --> 00:08:06,829 ¿por qué quiero decir esto? 201 00:08:06,889 --> 00:08:09,829 que entonces el diseño de herramientas 202 00:08:09,829 --> 00:08:11,689 tecnológicas está hecho desde una perspectiva 203 00:08:11,689 --> 00:08:12,310 de humanos 204 00:08:12,310 --> 00:08:14,009 vale, pues es una 205 00:08:14,009 --> 00:08:19,800 Ismael y Daniel también 206 00:08:19,800 --> 00:08:20,899 sí 207 00:08:20,899 --> 00:08:22,199 seguro que has hablado 208 00:08:22,199 --> 00:08:24,620 bueno, pues tu voz la he oído 209 00:08:24,620 --> 00:08:25,699 estará en la cabeza 210 00:08:25,699 --> 00:08:28,620 en algún momento has hablado 211 00:08:28,620 --> 00:08:30,360 bueno, entonces 212 00:08:30,360 --> 00:08:32,480 desde una perspectiva, silencio 213 00:08:32,480 --> 00:08:34,080 desde una perspectiva de humanos 214 00:08:34,080 --> 00:08:37,000 tiene sentido que en una caja 215 00:08:37,000 --> 00:08:39,120 así, me quepa una caja pequeña 216 00:08:39,120 --> 00:08:41,179 y yo no tengo ningún problema 217 00:08:41,179 --> 00:08:42,980 luego, desde una perspectiva 218 00:08:42,980 --> 00:08:44,620 de humanos, en una variable 219 00:08:44,620 --> 00:08:46,980 declarada como long, porque no voy a poder 220 00:08:46,980 --> 00:08:48,039 meter un número entero 221 00:08:48,039 --> 00:08:50,360 cabe perfectamente, entonces eso 222 00:08:50,360 --> 00:08:52,799 que es algo que no es un problema 223 00:08:52,799 --> 00:08:54,600 en la vida real y a la que estamos 224 00:08:54,600 --> 00:08:56,299 habituados, pues se refleja 225 00:08:56,299 --> 00:08:58,600 en el lenguaje de programación, se tiene que 226 00:08:58,600 --> 00:09:00,559 reflejar, si no, el lenguaje de programación va por 227 00:09:00,559 --> 00:09:02,659 libre y la humanidad por otro lado 228 00:09:02,659 --> 00:09:04,139 y eso no tiene ningún sentido, vale 229 00:09:04,139 --> 00:09:06,440 pero en la vida real, en una caja pequeña 230 00:09:06,440 --> 00:09:08,440 nunca meteríamos una caja grande porque tenemos 231 00:09:08,440 --> 00:09:10,440 un problema, o rompemos la caja 232 00:09:10,440 --> 00:09:12,039 grande o no hay manera 233 00:09:12,039 --> 00:09:14,820 pues efectivamente 234 00:09:14,820 --> 00:09:16,059 eso se refleja en el lenguaje de programación 235 00:09:16,059 --> 00:09:17,779 en una variable I yo no 236 00:09:17,779 --> 00:09:20,039 meto un número long, ¿por qué? 237 00:09:20,039 --> 00:09:21,679 porque le tendré que quitar una parte 238 00:09:21,679 --> 00:09:24,200 ¿vale? pues eso mismo se refleja 239 00:09:24,200 --> 00:09:26,299 aquí, entonces, ¿en qué se traduce? 240 00:09:28,529 --> 00:09:29,590 si yo tengo una variable 241 00:09:29,590 --> 00:09:30,750 long como era 242 00:09:30,750 --> 00:09:35,429 número 3, ¿vale? 243 00:09:35,870 --> 00:09:37,070 en número 3 244 00:09:37,070 --> 00:09:39,070 yo le puedo asignar 245 00:09:39,070 --> 00:09:41,529 el numerito 7 sin ningún problema 246 00:09:41,529 --> 00:09:43,649 y no tengo que poner la L 247 00:09:43,649 --> 00:09:47,559 ni nada, ¿vale? 248 00:09:48,019 --> 00:09:48,840 no hace falta 249 00:09:48,840 --> 00:09:51,879 es decir, yo he dicho 250 00:09:51,879 --> 00:09:53,039 que si no pongo la L 251 00:09:53,039 --> 00:09:55,840 la máquina virtual guarda ese 252 00:09:55,840 --> 00:09:58,059 7 en 32 bits, vale 253 00:09:58,059 --> 00:09:59,879 pero es que 32 bits 254 00:09:59,879 --> 00:10:00,940 caben en 64 255 00:10:00,940 --> 00:10:04,120 entonces no hay ningún problema, y no solo eso 256 00:10:04,120 --> 00:10:05,980 si yo le asigno una variable 257 00:10:05,980 --> 00:10:07,019 que se entera como num 258 00:10:07,019 --> 00:10:09,600 num es entera, la tengo aquí arriba 259 00:10:09,600 --> 00:10:11,659 entonces 260 00:10:11,659 --> 00:10:13,940 la máquina virtual coge el 261 00:10:13,940 --> 00:10:15,960 valor de num que cabe en 32 262 00:10:15,960 --> 00:10:17,919 bits y lo guarda 263 00:10:17,919 --> 00:10:20,179 en número 3 que es una caja más grande, estupendo 264 00:10:20,179 --> 00:10:21,899 un numerito que cabe 265 00:10:21,899 --> 00:10:24,159 en esta caja, lo he guardado 266 00:10:24,159 --> 00:10:26,039 en una caja en la que me sobra la mitad 267 00:10:26,039 --> 00:10:28,039 del espacio, pero no hay ningún problema, me sobra 268 00:10:28,039 --> 00:10:29,419 la mitad del espacio, pues ya está 269 00:10:29,419 --> 00:10:32,320 entonces, número 3, se habrá quedado 270 00:10:32,320 --> 00:10:33,659 con lo que tenía Num 271 00:10:33,659 --> 00:10:36,340 sea lo que fuera, pero ya ha extendido 272 00:10:36,340 --> 00:10:38,340 a 64, ya ha extendido a 64 273 00:10:38,340 --> 00:10:40,200 bueno, esto es 274 00:10:40,200 --> 00:10:40,840 lo que se llama 275 00:10:40,840 --> 00:10:43,120 promoción automática 276 00:10:43,120 --> 00:10:45,740 para que os suene 277 00:10:45,740 --> 00:10:49,690 de estudiar por ahí 278 00:10:49,690 --> 00:10:51,509 o de los vídeos que veáis 279 00:10:51,509 --> 00:10:53,590 o de las cosas que hagáis para estudiar, ¿vale? 280 00:10:53,590 --> 00:10:56,169 la promoción automática es 281 00:10:56,169 --> 00:10:58,009 yo tengo una asignación cualquiera 282 00:10:58,009 --> 00:11:00,769 y los tipos no son compatibles 283 00:11:00,769 --> 00:11:02,610 eso ya es 284 00:11:02,610 --> 00:11:04,490 una situación rara, porque yo hasta ahora 285 00:11:04,490 --> 00:11:06,649 he dicho, dije ayer 286 00:11:06,649 --> 00:11:08,190 que en una sentencia de asignación 287 00:11:08,190 --> 00:11:10,490 que lo escribimos en la pizarra, el valor 288 00:11:10,490 --> 00:11:12,509 tiene que ser del mismo tipo 289 00:11:12,509 --> 00:11:14,190 de la variable a la que lo asignas 290 00:11:14,190 --> 00:11:15,370 eso es lo que dijimos 291 00:11:15,370 --> 00:11:18,389 si yo tengo una variable char, le tengo que dar un valor char 292 00:11:18,389 --> 00:11:20,309 si tengo una variable boolean 293 00:11:20,309 --> 00:11:21,429 le tengo que dar un valor boolean 294 00:11:21,429 --> 00:11:44,610 Si tengo una variable int, le tengo que dar un valor int. Bueno, pues eso, que es esa verdad universal, tiene sus pequeñitas excepciones. Vale, pues esas pequeñitas excepciones tienen que ver con la posibilidad de que la máquina virtual haga lo que se llama promoción automática, que a veces la hace porque tiene sentido y cuando no tiene sentido no la hace. 295 00:11:44,610 --> 00:11:47,250 promociones, te cambio 296 00:11:47,250 --> 00:11:49,309 el tipo de dato del valor porque 297 00:11:49,309 --> 00:11:51,210 te lo tengo que cambiar porque 298 00:11:51,210 --> 00:11:53,210 este valor no es de este tipo, pues 299 00:11:53,210 --> 00:11:53,769 te lo cambio 300 00:11:53,769 --> 00:11:57,350 ¿Hace ese cambio siempre? No, repito 301 00:11:57,350 --> 00:11:58,750 lo hace solo cuando tiene sentido 302 00:11:58,750 --> 00:12:00,490 entonces aquí lo puede hacer 303 00:12:00,490 --> 00:12:03,149 num es una variable int, muy bien 304 00:12:03,149 --> 00:12:04,730 cojo su valor 305 00:12:04,730 --> 00:12:07,409 ese valor lo promociono 306 00:12:07,409 --> 00:12:09,129 lo extiendo con 307 00:12:09,129 --> 00:12:11,509 16 ceros a la izquierda 308 00:12:11,509 --> 00:12:13,509 lo extiendo con 16 ceros 309 00:12:13,509 --> 00:12:15,070 a la izquierda, ya está en una caja enorme 310 00:12:15,070 --> 00:12:17,409 en la que 16 ceros me están sobrando 311 00:12:17,409 --> 00:12:19,549 no pasa nada, y ahora ya ese 312 00:12:19,549 --> 00:12:21,350 valor extendido con 313 00:12:21,350 --> 00:12:23,450 16 ceros lo guardo en esta caja grande 314 00:12:23,450 --> 00:12:25,409 y se acabó, esa es la promoción 315 00:12:25,409 --> 00:12:26,850 automática de int a long 316 00:12:26,850 --> 00:12:29,110 y no pasa nada y el compilador la traga 317 00:12:29,110 --> 00:12:31,309 y la podemos hacer de byte a short 318 00:12:31,309 --> 00:12:33,289 de byte a int, es decir, de cualquier entero 319 00:12:33,289 --> 00:12:35,110 pequeño a uno más grande 320 00:12:35,110 --> 00:12:37,409 no hay ningún 321 00:12:37,409 --> 00:12:39,309 problema, esa promoción automática 322 00:12:39,309 --> 00:12:41,429 de enteros siempre se puede hacer 323 00:12:41,429 --> 00:12:47,720 cuidado, significa eso que la variable 324 00:12:47,720 --> 00:12:49,399 num haya cambiado el tipo 325 00:12:49,399 --> 00:12:50,820 no tiene nada que ver 326 00:12:50,820 --> 00:12:52,700 la cajita num 327 00:12:52,700 --> 00:12:55,700 sigue siendo una cajita de 32 bits 328 00:12:55,700 --> 00:12:57,700 yo lo que he hecho ha sido de esa caja 329 00:12:57,700 --> 00:12:58,480 sacar el valor 330 00:12:58,480 --> 00:13:01,279 y ese valor meterlo en la caja grande 331 00:13:01,279 --> 00:13:03,200 rellenando con ceros 332 00:13:03,200 --> 00:13:05,639 pero la cajita num 333 00:13:05,639 --> 00:13:07,860 sigue teniendo sus 32 bits, no ha cambiado 334 00:13:07,860 --> 00:13:09,600 de hecho si yo ahora 335 00:13:09,600 --> 00:13:11,779 a num le intentara 336 00:13:11,779 --> 00:13:13,159 dar un valor largote 337 00:13:13,159 --> 00:13:17,940 pues es que no me dejaría 338 00:13:17,940 --> 00:13:19,659 ¿vale? me diría 339 00:13:19,659 --> 00:13:21,820 oye, este es un número 340 00:13:21,820 --> 00:13:24,080 long de 64 341 00:13:24,080 --> 00:13:25,940 bits, aunque quepa en menos 342 00:13:25,940 --> 00:13:27,759 al poner la L ya le estoy diciendo que lo guarde 343 00:13:27,759 --> 00:13:29,960 en 64, me estás diciendo un número 344 00:13:29,960 --> 00:13:31,620 de 64 bits, lo siento 345 00:13:31,620 --> 00:13:33,879 esta caja es de 32, aquí no cabe 346 00:13:33,879 --> 00:13:36,080 pues la promoción automática 347 00:13:36,080 --> 00:13:37,620 inversa, o sea 348 00:13:37,620 --> 00:13:39,779 la despromoción, esa no se puede 349 00:13:39,779 --> 00:13:41,740 hacer, un segundín, porque esa sí que 350 00:13:41,740 --> 00:13:42,759 implica perder información 351 00:13:42,759 --> 00:13:45,779 entonces las conversiones en las que no se pierde 352 00:13:45,779 --> 00:13:47,840 información, como poner ceros a la izquierda 353 00:13:47,840 --> 00:13:49,639 de int a long, no hay problema 354 00:13:49,639 --> 00:13:51,039 las hace automáticamente 355 00:13:51,039 --> 00:13:54,159 esta, pero las despromociones 356 00:13:54,159 --> 00:13:56,080 que yo tengo 64 bits 357 00:13:56,080 --> 00:13:57,720 y lo tengo que meter 358 00:13:57,720 --> 00:13:58,820 en caja de 32 359 00:13:58,820 --> 00:14:01,860 no la puedo hacer, porque tengo que 360 00:14:01,860 --> 00:14:03,179 cortar una parte 361 00:14:03,179 --> 00:14:05,480 en este caso en particular, como esto 362 00:14:05,480 --> 00:14:07,100 cabe en int, por casualidad 363 00:14:07,100 --> 00:14:09,919 no pasaría nada 364 00:14:09,919 --> 00:14:11,539 porque los 16 365 00:14:11,539 --> 00:14:13,639 bits de la izquierda son ceros 366 00:14:13,639 --> 00:14:15,799 pero eso el compilador no lo sabe 367 00:14:15,799 --> 00:14:17,840 ni la máquina virtual, digo, yo solo sé 368 00:14:17,840 --> 00:14:19,659 que me das un número que está en 369 00:14:19,659 --> 00:14:21,700 64 bits, aunque sean todos ceros 370 00:14:21,700 --> 00:14:23,419 y aquí un 1, me lo da 64 371 00:14:23,419 --> 00:14:26,080 y quieres que lo meta en 32, lo siento 372 00:14:26,080 --> 00:14:27,720 pero yo no voy a cortar 16 373 00:14:27,720 --> 00:14:29,639 por mucho que sean ceros, me da lo mismo 374 00:14:29,639 --> 00:14:31,679 porque a lo mejor ahora lo son, luego no lo son 375 00:14:31,679 --> 00:14:32,860 puede cambiar el valor, ¿vale? 376 00:14:33,440 --> 00:14:35,940 luego, de int a long 377 00:14:35,940 --> 00:14:37,759 podemos, de long a int no 378 00:14:37,759 --> 00:14:40,220 de byte a int podemos, de int a byte no 379 00:14:40,220 --> 00:14:41,919 ¿Vale? ¿Está claro, no? 380 00:14:42,240 --> 00:14:42,539 Dime 381 00:14:42,539 --> 00:14:47,500 Claro, no es una caja 382 00:14:47,500 --> 00:14:48,919 No, no la meto en número 383 00:14:48,919 --> 00:14:50,440 Meto su valor 384 00:14:50,440 --> 00:14:53,519 Claro, a ver, esto 385 00:14:53,519 --> 00:14:55,379 Espera, para no poner la pizarra que es un rollo 386 00:14:55,379 --> 00:14:56,919 Vamos 387 00:14:56,919 --> 00:15:00,740 Vale, a ver 388 00:15:00,740 --> 00:15:06,830 Yo tengo aquí 389 00:15:06,830 --> 00:15:10,590 Mi cajita 390 00:15:10,590 --> 00:15:12,429 Y esta cajita 391 00:15:12,429 --> 00:15:14,289 Es la que se llama 392 00:15:14,289 --> 00:15:18,169 num, ¿vale? 393 00:15:27,360 --> 00:15:28,220 vale, esta 394 00:15:28,220 --> 00:15:31,240 cajita se llama num 395 00:15:31,240 --> 00:15:31,500 ¿vale? 396 00:15:33,080 --> 00:15:34,960 esta cajita tiene un valor 397 00:15:34,960 --> 00:15:36,600 por ejemplo el 7 398 00:15:36,600 --> 00:15:43,690 vale, tiene el 7 399 00:15:43,690 --> 00:15:46,470 y esta cajita 400 00:15:46,470 --> 00:15:48,330 es una cajita que mide 401 00:15:48,330 --> 00:15:50,389 no, no quería esto 402 00:15:55,759 --> 00:15:59,389 ahí 403 00:15:59,389 --> 00:16:08,789 esta no es para 404 00:16:08,789 --> 00:16:11,929 hacer la que yo quiera 405 00:16:11,929 --> 00:16:13,370 bueno da igual 406 00:16:13,370 --> 00:16:14,769 esta cajita mide 407 00:16:14,769 --> 00:16:18,610 32 bits 408 00:16:18,610 --> 00:16:19,649 eso está claro 409 00:16:19,649 --> 00:16:21,269 ahora yo tengo otra variable 410 00:16:21,269 --> 00:16:23,169 tengo mi variable 411 00:16:23,169 --> 00:16:25,309 long más larga 412 00:16:25,309 --> 00:16:27,450 que esta variable ahora mide 413 00:16:27,450 --> 00:16:29,570 64 es más grande 414 00:16:29,570 --> 00:16:31,750 y esta variable 415 00:16:31,750 --> 00:16:32,490 se llama 416 00:16:32,490 --> 00:16:37,090 num2 por ejemplo 417 00:16:37,090 --> 00:16:40,009 entonces que hago yo cuando estoy 418 00:16:40,009 --> 00:16:41,149 haciendo esta asignación 419 00:16:41,149 --> 00:16:45,559 num2 420 00:16:45,559 --> 00:16:47,200 igual a num 421 00:16:47,200 --> 00:16:49,960 ¿qué hago cuando estoy haciendo la sentencia de abajo? 422 00:16:51,039 --> 00:16:52,039 primero, recordad 423 00:16:52,039 --> 00:16:53,480 lo que hace la máquina virtual, primero 424 00:16:53,480 --> 00:16:55,299 se va a esa expresión 425 00:16:55,299 --> 00:16:57,659 es lo primero que hace, se va ahí 426 00:16:57,659 --> 00:17:01,259 ¿no es esto para? 427 00:17:01,259 --> 00:17:03,340 arriba a la izquierda 428 00:17:03,340 --> 00:17:05,299 ¿cómo arriba a la izquierda? 429 00:17:05,400 --> 00:17:07,119 ahí, la izquierda y el lápiz, el lápiz 430 00:17:07,119 --> 00:17:08,640 amarillo, ah, pero esto 431 00:17:08,640 --> 00:17:11,440 claro, pero no tenía que seleccionar el lápiz antes 432 00:17:11,440 --> 00:17:13,640 Ah, vale, que le estaba dando a esto directamente 433 00:17:13,640 --> 00:17:14,099 Vale 434 00:17:14,099 --> 00:17:17,119 Vale, pues ¿qué hago? 435 00:17:17,920 --> 00:17:19,400 Claro, se me lo estaba quitando 436 00:17:19,400 --> 00:17:21,759 Vale, ¿qué hago cuando yo hago 437 00:17:21,759 --> 00:17:22,720 Esta 438 00:17:22,720 --> 00:17:24,420 Expresión de aquí? 439 00:17:25,279 --> 00:17:26,819 Recordad lo que hace la máquina virtual 440 00:17:26,819 --> 00:17:29,539 Primero, evalúa eso 441 00:17:29,539 --> 00:17:33,740 Evaluar eso es, como solo tiene el nombre 442 00:17:33,740 --> 00:17:34,359 De una variable 443 00:17:34,359 --> 00:17:37,799 Se va a su contenido, vale, se va al 7 444 00:17:37,799 --> 00:17:39,920 Saca el 7 de ahí 445 00:17:39,920 --> 00:17:41,940 y lo lleva aquí dentro 446 00:17:41,940 --> 00:17:43,359 el 7 447 00:17:43,359 --> 00:17:45,640 cabe en 64 bits 448 00:17:45,640 --> 00:17:47,799 claro que cabe, pues me copia aquí 449 00:17:47,799 --> 00:17:49,579 el 7 y ya está 450 00:17:49,579 --> 00:17:51,740 pero esta cajita num 451 00:17:51,740 --> 00:17:53,700 sigue siendo una cajita de 32 bits 452 00:17:53,700 --> 00:17:57,819 claro, claro, claro, sigue estando en la caja 453 00:17:57,819 --> 00:17:58,980 la variable no ha desaparecido 454 00:17:58,980 --> 00:18:01,779 la variable no ha desaparecido, lo que pasa es que 455 00:18:01,779 --> 00:18:03,279 yo he utilizado ese valor 456 00:18:03,279 --> 00:18:05,539 para construir ahí una expresión 457 00:18:05,539 --> 00:18:07,799 que en ese caso es una expresión muy sencilla, que es el valor 458 00:18:07,799 --> 00:18:09,539 tal cual, pero podría ser num más 7 459 00:18:09,539 --> 00:18:11,579 por ejemplo, he utilizado el valor 460 00:18:11,579 --> 00:18:14,240 y lo puedo utilizar 7 líneas más abajo 461 00:18:14,240 --> 00:18:15,900 a lo mejor 7 líneas 462 00:18:15,900 --> 00:18:17,759 puedo utilizar otra vez num2 igual a 463 00:18:17,759 --> 00:18:19,819 num más 7, la variable sigue ahí 464 00:18:19,819 --> 00:18:20,900 con el valor que tuviera 465 00:18:20,900 --> 00:18:25,819 yo la utilizo, no la puedes eliminar 466 00:18:25,819 --> 00:18:27,759 yo la utilizo siempre que quiera 467 00:18:27,759 --> 00:18:29,680 una vez que la he declarado, la caja está ahí 468 00:18:29,680 --> 00:18:31,539 le cambio el valor cuando 469 00:18:31,539 --> 00:18:33,819 quiera y utilizo 470 00:18:33,819 --> 00:18:35,339 su valor en expresiones 471 00:18:35,339 --> 00:18:37,099 como esta, siempre que quiera 472 00:18:37,099 --> 00:18:39,220 y la variable no ha desaparecido 473 00:18:39,220 --> 00:18:41,880 y en este caso ni siquiera ha cambiado de tamaño. 474 00:18:42,339 --> 00:18:44,579 Yo he cogido su valor 7, lo he llevado aquí. 475 00:18:45,279 --> 00:18:46,400 No hay problema porque cabe. 476 00:18:47,519 --> 00:18:49,799 Pero la cajita num sigue estando como estaba. 477 00:18:50,700 --> 00:18:52,640 Una variable, una vez que está declarada de un tipo, 478 00:18:52,880 --> 00:18:54,059 sigue declarada de ese tipo. 479 00:18:54,500 --> 00:18:55,339 No se puede cambiar. 480 00:18:55,799 --> 00:18:58,099 No es como en Python ni como en algunos otros lenguajes 481 00:18:58,099 --> 00:19:00,000 menos restrictivos, ¿vale? 482 00:19:01,220 --> 00:19:01,700 Bueno. 483 00:19:05,079 --> 00:19:07,680 Vale, pues hablábamos que la promoción se puede hacer 484 00:19:07,680 --> 00:19:09,180 de tipos 485 00:19:09,180 --> 00:19:11,240 de almacenamiento de un tamaño 486 00:19:11,240 --> 00:19:13,180 a más superior, pero a la inversa no 487 00:19:13,180 --> 00:19:14,880 la despromoción, o sea, esto no se puede hacer 488 00:19:14,880 --> 00:19:17,279 porque esto es un long, no podría hacer 489 00:19:17,279 --> 00:19:18,380 num igual a 490 00:19:18,380 --> 00:19:20,720 número 3 491 00:19:20,720 --> 00:19:23,160 ¿vale? no podría hacerlo porque 492 00:19:23,160 --> 00:19:25,160 número 3 es de tipo int, perdón 493 00:19:25,160 --> 00:19:27,519 número 3 la he declarado de tipo long 494 00:19:27,519 --> 00:19:29,420 aquí arriba, número 3 495 00:19:29,420 --> 00:19:31,140 está de tipo long, entonces 496 00:19:31,140 --> 00:19:33,099 no me deja el compilador directamente, no me 497 00:19:33,099 --> 00:19:34,420 deja, yo le pongo 498 00:19:34,420 --> 00:19:36,539 número 3 más 7 499 00:19:36,539 --> 00:19:37,980 me dice, no puedo 500 00:19:37,980 --> 00:19:43,220 claro, porque esta es de tipo long 501 00:19:43,220 --> 00:19:44,279 número 3 502 00:19:44,279 --> 00:19:47,019 el compilador dice, a ver, número 3 es un nombre 503 00:19:47,019 --> 00:19:49,279 de variable, muy bien, que es lo primero que hago 504 00:19:49,279 --> 00:19:50,920 me voy a buscar 505 00:19:50,920 --> 00:19:53,500 donde está esa variable declarada 506 00:19:53,500 --> 00:19:55,559 está aquí 507 00:19:55,559 --> 00:19:57,500 uy, está declarada 508 00:19:57,500 --> 00:19:58,240 como 64 509 00:19:58,240 --> 00:20:01,220 entonces yo, cuando recoja su valor 510 00:20:01,220 --> 00:20:03,700 de 64, cuando lo recoja 511 00:20:03,700 --> 00:20:05,079 para hacer la suma 512 00:20:05,079 --> 00:20:07,119 ese valor de 64 513 00:20:07,119 --> 00:20:09,200 si luego lo quiero meter 514 00:20:09,200 --> 00:20:10,500 en una cajita de 32 515 00:20:10,500 --> 00:20:11,819 lo voy a tener que cortar 516 00:20:11,819 --> 00:20:13,319 no puedo 517 00:20:13,319 --> 00:20:15,200 entonces 518 00:20:15,200 --> 00:20:18,619 en una expresión 519 00:20:18,619 --> 00:20:20,500 en una expresión 520 00:20:20,500 --> 00:20:22,619 cuyo resultado va a ir un int 521 00:20:22,619 --> 00:20:24,980 en esa expresión no puede haber 522 00:20:24,980 --> 00:20:26,000 variables que sean log 523 00:20:26,000 --> 00:20:28,660 en ningún caso, no puede haber variables que sean log 524 00:20:28,660 --> 00:20:29,599 ¿vale? 525 00:20:33,200 --> 00:20:34,980 esta no molesta, por ejemplo 526 00:20:37,839 --> 00:20:39,420 Imaginaos que yo tengo esta expresión. 527 00:20:39,940 --> 00:20:41,079 Número 1 era entero, ¿verdad? 528 00:20:41,819 --> 00:20:42,920 Sí, vale. 529 00:20:43,440 --> 00:20:47,480 Aquí tengo a la variable num, dale, 530 00:20:48,140 --> 00:20:52,200 el resultado de coger el valor de número 3 531 00:20:52,200 --> 00:20:54,299 y coger el valor de número 1. 532 00:20:54,920 --> 00:20:56,079 Vale, esta no molesta, 533 00:20:56,460 --> 00:20:58,480 porque el valor de número 1 está en 32, es así. 534 00:20:59,099 --> 00:21:01,019 Pero ahora el compilador cuando coge este valor 535 00:21:01,019 --> 00:21:02,500 y lo va a sumar con este, dice, 536 00:21:02,500 --> 00:21:04,299 uy, este sí molesta, 537 00:21:04,299 --> 00:21:06,900 porque número 3 está en una caja 538 00:21:06,900 --> 00:21:09,099 de 64, entonces lo que yo coja ahí 539 00:21:09,099 --> 00:21:10,660 lo voy a tener que cortar 540 00:21:10,660 --> 00:21:13,079 para luego guardarlo en 541 00:21:13,079 --> 00:21:14,940 num, entonces este es 542 00:21:14,940 --> 00:21:16,859 el que molesta, el error de compilación viene 543 00:21:16,859 --> 00:21:17,920 de aquí, ¿vale? 544 00:21:18,500 --> 00:21:20,500 Cuando la suma de los dos números que aunque sean 545 00:21:20,500 --> 00:21:22,299 no caben en un int 546 00:21:22,299 --> 00:21:24,859 en ese caso no te lo 547 00:21:24,859 --> 00:21:26,180 transforma a un num 548 00:21:26,180 --> 00:21:28,019 No, no, no, claro 549 00:21:28,019 --> 00:21:29,660 Pero me quiero decir 550 00:21:29,660 --> 00:21:31,299 num está declarado 551 00:21:31,299 --> 00:21:32,599 num está como int 552 00:21:32,599 --> 00:21:35,839 y pongamos que número 3 y número 1 también son 553 00:21:35,839 --> 00:21:38,279 pero la suma de los dos 554 00:21:38,279 --> 00:21:39,380 es un 555 00:21:39,380 --> 00:21:41,039 ah, te da un número muy grande 556 00:21:41,039 --> 00:21:43,740 desborda, a ver 557 00:21:43,740 --> 00:21:45,960 no te da un error, pero desborda 558 00:21:45,960 --> 00:21:48,140 claro, no, no, no, eso sintácticamente 559 00:21:48,140 --> 00:21:50,180 es válido, claro, imagínate 560 00:21:50,180 --> 00:21:51,299 por ejemplo que yo tengo esto 561 00:21:51,299 --> 00:21:53,660 vale, entonces 562 00:21:53,660 --> 00:21:56,240 número 1 es entero, número 1 es entero 563 00:21:56,240 --> 00:21:57,599 está en 32 bits 564 00:21:57,599 --> 00:22:00,039 luego el compilador, que lo único que hace es ver 565 00:22:00,039 --> 00:22:01,180 que no haya incoherencias 566 00:22:01,180 --> 00:22:03,980 que no hay incoherencias, le parece perfectamente válido 567 00:22:03,980 --> 00:22:05,980 y esto compila, ahora que puede pasar 568 00:22:05,980 --> 00:22:07,920 en tiempo de ejecución, en tiempo de ejecución 569 00:22:07,920 --> 00:22:09,880 es otra cosa, imagínate 570 00:22:09,880 --> 00:22:11,700 que en tiempo de ejecución hemos metido en número 1 571 00:22:11,700 --> 00:22:14,059 el número entero más grande que se puede 572 00:22:14,059 --> 00:22:15,559 no hay problema 573 00:22:15,559 --> 00:22:17,940 cabe en int ese número, yo lo he metido 574 00:22:17,940 --> 00:22:19,180 y ahora 575 00:22:19,180 --> 00:22:21,759 al sumar número 1 más número 1 576 00:22:21,759 --> 00:22:22,920 ese número 577 00:22:22,920 --> 00:22:25,539 ya no cabe en 32 578 00:22:25,539 --> 00:22:26,720 ya no cabe 579 00:22:26,720 --> 00:22:28,200 ¿vale? pues 580 00:22:28,200 --> 00:22:30,259 ese número 581 00:22:30,259 --> 00:22:32,299 necesitará un bit más 582 00:22:32,299 --> 00:22:34,680 pero es que directamente te mete lo que quepa 583 00:22:34,680 --> 00:22:36,579 en 32, o sea, ha desbordado 584 00:22:36,579 --> 00:22:38,680 entonces el resultado no va a tener ningún 585 00:22:38,680 --> 00:22:40,640 sentido, no va a tener sentido porque te va 586 00:22:40,640 --> 00:22:42,480 a quitar los bits de la izquierda, no va a tener sentido 587 00:22:42,480 --> 00:22:44,559 pero el programa ejecuta y no tiene ningún 588 00:22:44,559 --> 00:22:45,900 problema, ¿vale? 589 00:22:46,960 --> 00:22:48,440 no te das cuenta a simple vista 590 00:22:48,440 --> 00:22:50,579 salvo cuando ves que la suma de tropecientos mil 591 00:22:50,579 --> 00:22:51,759 a tropecientos mil te da uno 592 00:22:51,759 --> 00:22:54,079 dices, uy, qué raro, claro, porque 593 00:22:54,079 --> 00:22:55,960 me ha desbordado, se ha ido uno ahí 594 00:22:55,960 --> 00:22:57,960 y claro, ¿vale? 595 00:22:58,200 --> 00:23:00,920 entonces lo que ocurre es que si tú prevés 596 00:23:00,920 --> 00:23:03,140 que tu aplicación va a tener 597 00:23:03,140 --> 00:23:05,059 números tan próximos al límite 598 00:23:05,059 --> 00:23:07,000 superior, pues ya lo declaras 599 00:23:07,000 --> 00:23:08,059 como long directamente 600 00:23:08,059 --> 00:23:11,000 pero sí, efectivamente 601 00:23:11,000 --> 00:23:12,900 esa pregunta 602 00:23:12,900 --> 00:23:14,799 está muy bien porque esa situación se da 603 00:23:14,799 --> 00:23:16,380 y el compilador 604 00:23:16,380 --> 00:23:19,380 le encaja todo, pero luego en la ejecución 605 00:23:19,380 --> 00:23:20,859 te da un número 606 00:23:20,859 --> 00:23:22,180 que no es correcto 607 00:23:22,180 --> 00:23:24,440 para que se ponga en 64 bits hay que poner 608 00:23:24,440 --> 00:23:25,519 L al final, cierto 609 00:23:25,519 --> 00:23:27,720 entonces, si el número 610 00:23:27,720 --> 00:23:29,480 del resultado es long 611 00:23:29,480 --> 00:23:31,819 tú pones long, o sea, ¿cómo se 612 00:23:31,819 --> 00:23:33,339 pondría la L al final? ¿o no es necesario? 613 00:23:33,680 --> 00:23:35,339 hay que declarar long como long 614 00:23:35,339 --> 00:23:36,180 a ver, es que 615 00:23:36,180 --> 00:23:40,119 si está declarado como long 616 00:23:40,119 --> 00:23:40,539 esta 617 00:23:40,539 --> 00:23:43,619 vale, es que da igual, eso tampoco te lo 618 00:23:43,619 --> 00:23:45,539 soluciona, porque lo primero que hace 619 00:23:45,539 --> 00:23:46,940 esto es 620 00:23:46,940 --> 00:23:49,039 no puedes 621 00:23:49,039 --> 00:23:51,740 ese truco de poner la L al final, como dices tú 622 00:23:51,740 --> 00:23:53,319 no puedes hacerlo aquí 623 00:23:53,319 --> 00:23:54,880 en nombres de variables 624 00:23:54,880 --> 00:23:57,319 entonces, como esto no se mira hasta el final 625 00:23:57,319 --> 00:23:59,099 lo que hay en la máquina virtual 626 00:23:59,099 --> 00:24:01,299 como esto es entero, te hace la suma 627 00:24:01,299 --> 00:24:02,839 con esta, entero también 628 00:24:02,839 --> 00:24:05,319 y te trunca 32 bits 629 00:24:05,319 --> 00:24:07,220 y eso no tienes forma 630 00:24:07,220 --> 00:24:08,319 de decir, extiéndelo 631 00:24:08,319 --> 00:24:09,900 no tienes manera 632 00:24:09,900 --> 00:24:13,200 y luego ya después, lo mete aquí 633 00:24:13,200 --> 00:24:14,740 pero lo mete aquí cuando ya lo ha truncado 634 00:24:14,740 --> 00:24:17,460 ¿vale? no es que tengas la opción 635 00:24:17,460 --> 00:24:18,720 que es lo que imagino tienes en mente 636 00:24:18,720 --> 00:24:20,740 de ponerle aquí una L como para decir 637 00:24:20,740 --> 00:24:23,160 guárdalo en 64, no puedes 638 00:24:23,160 --> 00:24:25,440 entonces usted tendría que estar número uno declarado como long 639 00:24:25,440 --> 00:24:26,839 claro, entonces 640 00:24:26,839 --> 00:24:28,799 número uno tendría que estar como long 641 00:24:28,799 --> 00:24:30,880 efectivamente, entonces claro 642 00:24:30,880 --> 00:24:33,099 la declaración de variables, pues tú 643 00:24:33,099 --> 00:24:35,119 si prevés que puedes trabajar 644 00:24:35,119 --> 00:24:36,900 con números muy grandes, pues directamente long 645 00:24:36,900 --> 00:24:39,039 porque de 32, 64 tampoco 646 00:24:39,039 --> 00:24:40,099 te vas a quedar sin memoria 647 00:24:40,099 --> 00:24:42,960 no importa que el num esté declarado como long 648 00:24:42,960 --> 00:24:45,240 lo que importa es que el número uno esté declarado como long 649 00:24:45,240 --> 00:24:46,099 en este caso 650 00:24:46,099 --> 00:24:48,539 claro, en este caso 651 00:24:48,539 --> 00:24:50,460 que el num esté declarado como long 652 00:24:50,460 --> 00:24:52,920 no da ninguna ventaja, porque el truncado 653 00:24:52,920 --> 00:24:54,940 se va a hacer antes, en la evaluación de la expresión. 654 00:24:55,839 --> 00:24:57,099 Claro, aquí habría 655 00:24:57,099 --> 00:24:59,180 que arreglarlo cambiando la declaración de número 1. 656 00:24:59,839 --> 00:25:00,039 ¿Vale? 657 00:25:01,160 --> 00:25:02,599 Vale. Por 658 00:25:02,599 --> 00:25:03,880 curiosidad, 659 00:25:05,000 --> 00:25:07,019 vamos a ver cuáles son los mayores números 660 00:25:07,019 --> 00:25:08,920 enteros y long que se 661 00:25:08,920 --> 00:25:10,279 pueden, pues 662 00:25:10,279 --> 00:25:11,539 tenemos 663 00:25:11,539 --> 00:25:14,720 de nuevo, aunque ahora tampoco lo 664 00:25:14,720 --> 00:25:16,819 entendemos muy bien, 665 00:25:18,539 --> 00:25:18,960 hay una 666 00:25:18,960 --> 00:25:22,420 recordad que 667 00:25:22,420 --> 00:25:33,960 Os dije, pues ayer, que esto que aparece aquí, os dije simplemente que era la máquina virtual con la que se va a ejecutar la aplicación. 668 00:25:34,059 --> 00:25:35,539 Ya está, os dije eso y se acabó, ¿vale? 669 00:25:36,119 --> 00:25:38,039 La máquina virtual con la que se va a ejecutar. 670 00:25:40,180 --> 00:25:48,819 Bueno, pues la máquina virtual con la que se va a ejecutar tiene un montón de clases de estas que yo puedo usar si quiero. 671 00:25:48,819 --> 00:25:51,720 de hecho, nosotros 672 00:25:51,720 --> 00:25:53,000 sin ser conscientes de ello 673 00:25:53,000 --> 00:25:55,839 cuando hemos ejecutado 674 00:25:55,839 --> 00:25:57,440 cuando hemos escrito esta sentencia 675 00:25:57,440 --> 00:25:59,819 esa sentencia 676 00:25:59,819 --> 00:26:01,380 está en realidad 677 00:26:01,380 --> 00:26:03,539 llamando a un programa muy complejo 678 00:26:03,539 --> 00:26:05,579 de mostrar por consola 679 00:26:05,579 --> 00:26:07,539 y ese programa muy 680 00:26:07,539 --> 00:26:09,279 complejo de mostrar por consola 681 00:26:09,279 --> 00:26:11,539 pues no lo hemos hecho nosotros, ¿cómo es que 682 00:26:11,539 --> 00:26:13,420 funciona? porque está 683 00:26:13,420 --> 00:26:15,359 lo tiene metido ese programita 684 00:26:15,359 --> 00:26:17,640 la máquina virtual, entonces 685 00:26:17,640 --> 00:26:36,420 ¿Qué quiero decir con esto? Que nuestras aplicaciones, que ahora mismo van a ser un ficherito sin más haciendo cosas, pueden también, si quieren, llamar a códigos que ya están hechos en otros programas dentro de la máquina virtual. Y eso lo estamos haciendo aquí, por ejemplo. 686 00:26:36,420 --> 00:26:54,740 Pues igual que podemos llamar a programas que ya están hechos para hacer cosas como este, que es el de mostrar por consola, podemos llamar a, llamémosle variables que ya están hechas, que no las he hecho yo y puedo usar, que me dan información. 687 00:26:54,740 --> 00:27:16,160 Entonces, ahora mismo vamos a ver, por curiosidad, unas variables que tienen un valor constante, que tienen guardada ya en la máquina virtual el máximo valor posible para que, por ejemplo, vamos a declarar una variable int máximo entero. 688 00:27:16,160 --> 00:27:21,890 vale, pues 689 00:27:21,890 --> 00:27:27,009 pues esto que yo he escrito aquí 690 00:27:27,009 --> 00:27:29,710 que ahora mismo lo creéis tal cual, es solo para que tengamos 691 00:27:29,710 --> 00:27:30,869 el dato, por curiosidad 692 00:27:30,869 --> 00:27:32,710 esto es 693 00:27:32,710 --> 00:27:35,549 un valor, esto es un valor 694 00:27:35,549 --> 00:27:37,009 un número, un valor 695 00:27:37,009 --> 00:27:39,630 que está guardada en esta variable tan rara 696 00:27:39,630 --> 00:27:41,289 que se llama maxValue, con mayúscula 697 00:27:41,289 --> 00:27:42,410 que está guardada en esta variable 698 00:27:42,410 --> 00:27:45,490 y esta variable ya existe, ya está hecha 699 00:27:45,490 --> 00:27:47,750 pero no en mi programa, sino en otro 700 00:27:47,750 --> 00:27:49,009 que está en la máquina virtual 701 00:27:49,009 --> 00:27:51,549 por eso podemos acceder a él cuando nos dé la gana 702 00:27:51,549 --> 00:27:54,029 al igual que hemos podido acceder, repito 703 00:27:54,029 --> 00:27:55,950 al system.println porque ya está 704 00:27:55,950 --> 00:27:57,109 hecho en la máquina virtual 705 00:27:57,109 --> 00:27:59,930 y yo lo puedo llamar, bueno pues 706 00:27:59,930 --> 00:28:01,910 ahora mismo creámonos que esto 707 00:28:01,910 --> 00:28:03,430 es una variable que se llama así 708 00:28:03,430 --> 00:28:06,150 que ya existe, tiene este nombre tan raro 709 00:28:06,150 --> 00:28:07,849 ya entenderemos lo del punto a que viene 710 00:28:07,849 --> 00:28:09,769 que sean mayúsculas, etcétera 711 00:28:09,769 --> 00:28:11,309 pues esta variable ya existe 712 00:28:11,309 --> 00:28:13,869 y está declarada en algún 713 00:28:13,869 --> 00:28:16,089 sitio, no en mi programa 714 00:28:16,089 --> 00:28:17,970 en algún sitio, pero yo puedo 715 00:28:17,970 --> 00:28:19,890 acceder a ella también, bueno vamos 716 00:28:19,890 --> 00:28:21,789 a ver qué valor tiene. Y no solo 717 00:28:21,789 --> 00:28:23,990 esta, sino que tengo muchas más. 718 00:28:25,150 --> 00:28:25,890 Vamos a poner 719 00:28:25,890 --> 00:28:36,609 por ejemplo, vale, 720 00:28:36,710 --> 00:28:38,430 pues vamos a mostrar 721 00:28:38,430 --> 00:28:40,490 el contenido. ¿Qué contienen 722 00:28:40,490 --> 00:28:42,529 estas variables? Estas variables, ahí 723 00:28:42,529 --> 00:28:44,589 en ese programa donde se han declarado, al que yo 724 00:28:44,589 --> 00:28:46,029 no tengo acceso, que es un programa que está ahí, 725 00:28:46,410 --> 00:28:47,450 no tengo acceso al código. 726 00:28:49,230 --> 00:28:50,150 Uy, quería poner min. 727 00:28:54,140 --> 00:28:54,420 Vale. 728 00:28:55,019 --> 00:28:56,119 Pues estas dos variables 729 00:28:56,119 --> 00:28:58,720 que ya están declaradas y tienen un valor 730 00:28:58,720 --> 00:29:00,799 asignado en algún programa que no es mío, 731 00:29:00,960 --> 00:29:03,140 Pero yo puedo llamar las esas variables siempre que quiera, 732 00:29:03,200 --> 00:29:04,740 las puedo llamar para asignar un valor. 733 00:29:05,059 --> 00:29:06,079 Las puedo llamar siempre que quiera. 734 00:29:06,700 --> 00:29:08,359 Pues estas en particular, ¿qué contienen? 735 00:29:09,160 --> 00:29:12,319 Pues contienen el máximo valor entero posible 736 00:29:12,319 --> 00:29:15,019 que se puede codificar en 32 bits 737 00:29:15,019 --> 00:29:16,720 y el mínimo valor entero posible 738 00:29:16,720 --> 00:29:18,440 que se puede codificar en 32 bits. 739 00:29:19,140 --> 00:29:20,779 Entonces, pues uno puede, 740 00:29:21,599 --> 00:29:22,920 está bien que tengamos ese dato 741 00:29:22,920 --> 00:29:25,039 para cuando uno haga sus programas 742 00:29:25,039 --> 00:29:27,319 saber si va a usar números mayores que esos, 743 00:29:27,400 --> 00:29:28,980 porque si los va a usar, pues entonces usa un long. 744 00:29:29,839 --> 00:29:30,079 ¿Vale? 745 00:29:30,079 --> 00:29:30,880 Entonces 746 00:29:30,880 --> 00:29:34,240 Si los mostramos 747 00:29:34,240 --> 00:29:42,579 Para poner la variable más rápido 748 00:29:42,579 --> 00:29:46,599 Pongo siso control espacio 749 00:29:46,599 --> 00:29:47,819 Para poner esto dices 750 00:29:47,819 --> 00:29:50,339 Lo que pasa es que no os lo 751 00:29:50,339 --> 00:29:52,420 No os lo digo 752 00:29:52,420 --> 00:29:54,240 Para que lo aprendáis de memoria 753 00:29:54,240 --> 00:29:56,000 Pero cuando ya lo habéis aprendido de memoria 754 00:29:56,000 --> 00:29:57,720 Es que de nuevo 755 00:29:57,720 --> 00:29:59,160 Generalizando otra vez 756 00:29:59,160 --> 00:30:02,200 Pero allá por febrero todavía hay gente que me pone 757 00:30:02,200 --> 00:30:03,700 El system con la s en minúscula 758 00:30:03,700 --> 00:30:05,220 Y no se da cuenta 759 00:30:05,220 --> 00:30:12,380 Vale, voy a poner aquí 760 00:30:12,380 --> 00:30:14,539 Antes una barrita separadora 761 00:30:14,539 --> 00:30:16,140 Porque como tengo ya un montón de 762 00:30:16,140 --> 00:30:18,339 System out por ahí, arriba 763 00:30:18,339 --> 00:30:20,440 Vale, pues vamos a ver 764 00:30:20,440 --> 00:30:21,359 Por curiosidad 765 00:30:21,359 --> 00:30:24,359 Esos valores máximos 766 00:30:24,359 --> 00:30:25,440 Y mínimos, ¿cuáles son? 767 00:30:27,769 --> 00:30:29,609 Vale, pues este es el mayor valor 768 00:30:29,609 --> 00:30:31,630 Entero que se puede almacenar 769 00:30:31,630 --> 00:30:32,569 En 32 bits 770 00:30:32,569 --> 00:30:35,650 Entonces si vais a usar números enteros más grandes que este 771 00:30:35,650 --> 00:30:36,349 Long 772 00:30:36,349 --> 00:30:38,470 O más pequeños que este 773 00:30:38,470 --> 00:30:40,650 Long, ¿vale? 774 00:30:40,730 --> 00:30:45,410 Y tenemos lo mismo con las variables long 775 00:30:45,410 --> 00:30:51,920 Pero esto está guardado en una variable 776 00:30:51,920 --> 00:30:54,960 Que no se llama así, sino que se llama long 777 00:30:54,960 --> 00:31:27,400 Vale, pues estas cuatro variables 778 00:31:27,400 --> 00:31:29,940 Que he puesto, que tienen estos nombres tan raros 779 00:31:29,940 --> 00:31:33,460 Repito, son variables que están declaradas en algún sitio 780 00:31:33,460 --> 00:31:35,539 Y yo tengo acceso a usarlas 781 00:31:35,539 --> 00:31:38,900 Para verlas, para hacer con ellas operaciones, lo que sea 782 00:31:38,900 --> 00:31:44,299 Y en particular el contenido de esas variables tiene ese significado. 783 00:31:45,559 --> 00:31:52,039 Pues esto es el mayor número long que podemos codificar. 784 00:31:54,829 --> 00:31:57,670 A ver, es muy grande, muchísimo. 785 00:32:00,390 --> 00:32:05,210 Entonces, ¿qué aplicación necesita un dato tan más grande que esto? 786 00:32:08,359 --> 00:32:09,119 ¿Tú crees? 787 00:32:09,119 --> 00:32:10,859 Hombre, sí, no creo. 788 00:32:10,859 --> 00:32:13,160 Alguna aplicación 789 00:32:13,160 --> 00:32:15,119 De contar estrellas 790 00:32:15,119 --> 00:32:17,000 Pero esas no se harán en Java, seguro 791 00:32:17,000 --> 00:32:18,880 ¿Vale? 792 00:32:22,059 --> 00:32:23,140 Bueno, ese es decimal 793 00:32:23,140 --> 00:32:25,119 Claro, ese iría en otro lado 794 00:32:25,119 --> 00:32:26,359 ¿Vale? 795 00:32:27,779 --> 00:32:29,599 Bueno, pues nada, que tengamos ese dato 796 00:32:29,599 --> 00:32:32,980 Venga, pues nos vamos al recreo