1 00:00:01,199 --> 00:00:05,960 Vale, vamos a continuar. Ninguna pregunta, ¿no? Por lo que veo. 2 00:00:08,220 --> 00:00:14,720 Bueno, pues entonces, estábamos con la asignación de variables y la compatibilidad de tipos, ¿vale? 3 00:00:16,920 --> 00:00:25,920 Recordad que como principio básico, el tipo de dato del valor que ponemos ahí tiene que ser igual, salvo con este matiz. 4 00:00:25,920 --> 00:00:28,100 salvo con este matiz, si se puede 5 00:00:28,100 --> 00:00:29,920 modificar sin perder 6 00:00:29,920 --> 00:00:31,980 información, lo deja hacer 7 00:00:31,980 --> 00:00:34,159 de hecho 8 00:00:34,159 --> 00:00:36,020 con los int y los long, ya está haciendo 9 00:00:36,020 --> 00:00:37,820 aquí una promoción automática, aquí 10 00:00:37,820 --> 00:00:40,500 que vamos a 11 00:00:40,500 --> 00:00:43,859 a ver ahora, que vamos a mencionar ahora 12 00:00:43,859 --> 00:00:46,399 a ver, vamos a volver a asignar 13 00:00:46,399 --> 00:00:47,280 a la variable 14 00:00:47,280 --> 00:00:49,200 número 3, que era long 15 00:00:49,200 --> 00:00:51,399 a la variable número 3 16 00:00:51,399 --> 00:00:53,560 vamos a volverle a hacer una asignación 17 00:00:53,560 --> 00:00:55,899 por ejemplo, esto de aquí 18 00:00:55,899 --> 00:00:57,399 Entonces 19 00:00:57,399 --> 00:01:00,899 Estas son cosas que tenéis que ir 20 00:01:00,899 --> 00:01:02,740 Vale, 6, 7 21 00:01:02,740 --> 00:01:05,180 La máquina virtual ahora se encuentra esta sentencia 22 00:01:05,180 --> 00:01:07,439 Silencio 23 00:01:07,439 --> 00:01:10,980 La máquina virtual se encuentra esta sentencia 24 00:01:10,980 --> 00:01:13,019 Entonces ahí se encuentra un número 25 00:01:13,019 --> 00:01:14,579 Se encuentra un número entero 26 00:01:14,579 --> 00:01:16,739 Entonces cuando la máquina virtual 27 00:01:16,739 --> 00:01:18,280 Se encuentra un número así 28 00:01:18,280 --> 00:01:20,019 6, 7, 5 29 00:01:20,019 --> 00:01:22,340 Menos 6, 7, 5, o sea un número entero 30 00:01:22,340 --> 00:01:23,079 Así por las buenas 31 00:01:23,079 --> 00:01:27,060 interpreta que le estamos dando un int 32 00:01:27,060 --> 00:01:28,780 interpreta un int 33 00:01:28,780 --> 00:01:31,019 con lo cual esa asignación a int 34 00:01:31,019 --> 00:01:32,180 es perfectamente válida 35 00:01:32,180 --> 00:01:33,400 porque interpreta que es un int 36 00:01:33,400 --> 00:01:36,319 y lo construye dentro como int con 32 bits 37 00:01:36,319 --> 00:01:37,299 lo construye dentro 38 00:01:37,299 --> 00:01:38,640 interpreta que es un int 39 00:01:38,640 --> 00:01:43,060 aquí este int lo está asignando una variable log 40 00:01:43,060 --> 00:01:44,620 no hay problema porque hemos dicho 41 00:01:44,620 --> 00:01:47,140 que se puede hacer la promoción automática 42 00:01:47,140 --> 00:01:48,280 no hay ningún problema 43 00:01:48,280 --> 00:01:50,840 entonces la máquina virtual lo interpreta como int 44 00:01:50,840 --> 00:01:51,659 porque es un número 45 00:01:51,659 --> 00:01:53,299 Lo interpreta como int 46 00:01:53,299 --> 00:01:55,359 Ahora, punto 2 47 00:01:55,359 --> 00:01:57,200 B, que tiene que asignarlo a un long 48 00:01:57,200 --> 00:01:59,340 Pues dice, ah, pues me toca ampliarlo 49 00:01:59,340 --> 00:02:01,060 Lo amplía, no hay problema 50 00:02:01,060 --> 00:02:02,340 Y ya está, ¿vale? 51 00:02:02,439 --> 00:02:04,620 Hasta ahí, eso ya lo sabemos 52 00:02:04,620 --> 00:02:08,860 Vale, pero ¿qué ocurre si yo aquí pongo un número muy grandote 53 00:02:08,860 --> 00:02:10,080 Que no puede ser un int? 54 00:02:10,819 --> 00:02:11,879 Por ejemplo este 55 00:02:11,879 --> 00:02:14,699 Vamos a ver, por curiosidad 56 00:02:14,699 --> 00:02:18,199 ¿Cuál es el número int más grande o más pequeño que se puede guardar? 57 00:02:18,240 --> 00:02:20,900 ¿Y cuál es el número long más grande o más pequeño que se puede guardar? 58 00:02:20,900 --> 00:02:44,180 ¿Cómo podemos ver eso? Bueno pues resulta que aunque a lo mejor no entendamos por qué se escribe así, Java tiene ya un montón de cosas que de toda la vida en programación se han llamado constantes que tienen ya valores asignados que pueden ser útiles, típico, estándar, la constante pi, ¿no? 59 00:02:44,180 --> 00:02:50,840 cualquier lenguaje de programación puede necesitar operar con la variable, con el valor constante pi para hacer cosas, 60 00:02:51,539 --> 00:02:55,580 pues entonces ya define en algún sitio una constante que tiene siempre ese valor, 61 00:02:56,460 --> 00:03:00,919 para que cuando nosotros tengamos que operar con la constante pi para trabajar con trigonometría, 62 00:03:01,659 --> 00:03:07,800 pues no tengamos que poner todo el rato 3, 14, 15, 9, no sé cuánto, no sé qué, tiene ya una constante pi, tiene sentido. 63 00:03:07,800 --> 00:03:33,400 Y como la constante pi, que he dicho esa porque es la que todos conocemos, hay otros valores interesantes que tiene sentido que cualquier lenguaje de programación los guarde ya en una variable suya que llamamos constante mal llamada de alguna manera porque la idea es que ese nombre se conserve y no lo cambiemos, pero no deja de ser una variable más. 64 00:03:33,400 --> 00:03:35,039 es una variable con ese valor pi 65 00:03:35,039 --> 00:03:37,219 bueno, pues cualquier lenguaje de programación 66 00:03:37,219 --> 00:03:39,620 tiene, cuando arranca 67 00:03:39,620 --> 00:03:41,639 tiene ya 68 00:03:41,639 --> 00:03:43,439 una serie de variables 69 00:03:43,439 --> 00:03:45,639 con unos valores que nos pueden 70 00:03:45,639 --> 00:03:47,699 ser útiles, a lo mejor podemos usarlos 71 00:03:47,699 --> 00:03:49,680 o podemos no usarlos, pero ya tiene 72 00:03:49,680 --> 00:03:51,939 algunos con unos valores que nos pueden ser útiles 73 00:03:51,939 --> 00:03:53,960 el típico, repito, la variable pi 74 00:03:53,960 --> 00:03:55,639 ¿vale? el típico 75 00:03:55,639 --> 00:03:58,000 ¿qué otras variables 76 00:03:58,000 --> 00:03:59,620 también según arranca un programa 77 00:03:59,620 --> 00:04:01,939 se crean, si nosotros nos demos 78 00:04:01,939 --> 00:04:05,840 cuente, nos enteremos, se crean y se quedan ahí con valores, pues por ejemplo 79 00:04:05,840 --> 00:04:09,800 una variable que guarda el mayor número entero almacenable 80 00:04:09,800 --> 00:04:13,139 en un int, el mayor número entero almacenable en un long 81 00:04:13,139 --> 00:04:17,740 el menor número entero almacenable en un int 82 00:04:17,740 --> 00:04:21,920 el menor número entero almacenable en un long, son valores que nos pueden 83 00:04:21,920 --> 00:04:25,459 ser interesantes para saber si los datos con los que trabajamos 84 00:04:25,459 --> 00:04:28,680 superan el rango de almacenamiento, son valores que son interesantes 85 00:04:28,680 --> 00:04:36,139 y una aplicación cuando arranca, pues crea unas variables y les da ese valor. 86 00:04:36,600 --> 00:04:39,319 Vamos a mostrar esas variables cuáles son, porque no sabemos cuáles son su nombre, 87 00:04:39,399 --> 00:04:42,660 no las hemos declarado nosotros, nosotros hemos declarado estas. 88 00:04:43,500 --> 00:04:46,720 Pero repito, hay otras que han aparecido ahí solas, de la nada, 89 00:04:46,720 --> 00:04:49,920 la máquina virtual las ha hecho aparecer, porque pueden ser interesantes. 90 00:04:50,399 --> 00:04:54,839 ¿Cuál es su nombre? Pues tendríamos que buscarlo en la documentación de Java, 91 00:04:54,839 --> 00:04:59,180 a ver cuál es, porque es un nombre fijo, claro, algunas, las típicas, pues las conocemos. 92 00:05:00,199 --> 00:05:05,100 Bueno, pues por ejemplo, vamos a mostrar aquí, por curiosidad y porque ahora vamos a ejemplificar 93 00:05:05,100 --> 00:05:18,300 un poco, ahora ya justo después de la promoción automática, vamos a mostrar el mayor y menor 94 00:05:18,300 --> 00:05:20,060 valor 95 00:05:20,060 --> 00:05:23,100 almacenable en una variable 96 00:05:23,100 --> 00:05:23,819 de tipo long 97 00:05:23,819 --> 00:05:30,509 variable de 98 00:05:30,509 --> 00:05:32,790 tipo long 99 00:05:32,790 --> 00:05:35,230 vale, mostrar por consola 100 00:05:35,230 --> 00:05:37,149 recordad 101 00:05:37,149 --> 00:05:39,389 que era esta sentencia, mostrar por consola 102 00:05:39,389 --> 00:05:41,129 entonces yo esta sentencia 103 00:05:41,129 --> 00:05:43,069 ya vamos poco a poco familiarizándonos 104 00:05:43,069 --> 00:05:45,230 con su uso, poco a poco, porque tenemos que usar mucho 105 00:05:45,230 --> 00:05:46,550 vamos poquito a poco 106 00:05:46,550 --> 00:05:49,069 recordad que el uso que le hemos 107 00:05:49,069 --> 00:05:56,350 dado hasta ahora es, si yo le paso una cadena de texto, me muestra tal cual la cadena de 108 00:05:56,350 --> 00:05:59,750 texto, eso está claro, si le paso una cadena de texto me muestra tal cual la cadena de 109 00:05:59,750 --> 00:06:07,490 texto, pero si le paso un identificador no entrecomillado, un identificador no entrecomillado, 110 00:06:08,350 --> 00:06:14,769 por ejemplo este, entonces como este identificador no está entrecomillado, pasa lo mismo que 111 00:06:14,769 --> 00:06:16,509 En la evaluación de expresiones 112 00:06:16,509 --> 00:06:18,910 Dice, ah, pues debe ser que te refieres 113 00:06:18,910 --> 00:06:20,170 A una variable que se llama así 114 00:06:20,170 --> 00:06:22,350 Como no está entrecomillado, debe ser que te refieres a eso 115 00:06:22,350 --> 00:06:24,470 ¿Vale? Entonces él la busca 116 00:06:24,470 --> 00:06:26,870 Mira, a ver si está declarada, coge el valor y muestra el valor 117 00:06:26,870 --> 00:06:28,050 ¿Vale? Hasta ahí 118 00:06:28,050 --> 00:06:29,370 Está claro 119 00:06:29,370 --> 00:06:32,029 Otra cosa es que yo le dé esto 120 00:06:32,029 --> 00:06:34,430 Si le doy esto, ahí lógicamente 121 00:06:34,430 --> 00:06:35,709 Como era de esperar, me dice 122 00:06:35,709 --> 00:06:37,569 No te puedo mostrar esto 123 00:06:37,569 --> 00:06:40,389 Porque no está entrecomillado, con lo cual 124 00:06:40,389 --> 00:06:41,649 No es esa cadena tal cual 125 00:06:41,649 --> 00:06:44,069 Si yo la entrecomillo, por supuesto puede 126 00:06:44,069 --> 00:06:46,509 porque entonces se refiere cadena 127 00:06:46,509 --> 00:06:48,129 número 4, ningún problema 128 00:06:48,129 --> 00:06:49,569 la puede mostrar sin problema 129 00:06:49,569 --> 00:06:51,790 pero si yo le quito las comillas 130 00:06:51,790 --> 00:06:54,629 entonces lo que le estoy diciendo 131 00:06:54,629 --> 00:06:56,790 es, este es el identificador 132 00:06:56,790 --> 00:06:58,470 número 4, lo que me interesa es 133 00:06:58,470 --> 00:07:00,189 que vayas a la variable que se llama 134 00:07:00,189 --> 00:07:01,610 número 4 y cojas su valor 135 00:07:01,610 --> 00:07:04,329 la variable número 4 no existe 136 00:07:04,329 --> 00:07:05,709 no está declarada, no existe 137 00:07:05,709 --> 00:07:08,029 pues no te la puede mostrar y te dice 138 00:07:08,029 --> 00:07:09,129 muy mal, muy mal 139 00:07:09,129 --> 00:07:11,509 y te da una recompilación y no puedes seguir 140 00:07:11,509 --> 00:07:14,470 pero si le pongo número 3 pues sí 141 00:07:14,470 --> 00:07:16,889 bueno, pues entonces yo he hecho este system out ahora 142 00:07:16,889 --> 00:07:19,129 para mostrar el contenido 143 00:07:19,129 --> 00:07:20,790 de la variable que contiene 144 00:07:20,790 --> 00:07:23,370 el mayor valor long almacenable 145 00:07:23,370 --> 00:07:25,110 y el menor valor, para tener esa información 146 00:07:25,110 --> 00:07:26,149 porque puede ser interesante 147 00:07:26,149 --> 00:07:28,490 ¿cuál es el nombre de esa variable? 148 00:07:28,790 --> 00:07:30,810 no lo sé, es una de esas que hace aparecer 149 00:07:30,810 --> 00:07:31,850 java de partida 150 00:07:31,850 --> 00:07:35,250 y que están ahí, yo las puedo usar, pero es que no sé cuál es el nombre 151 00:07:35,250 --> 00:07:37,410 bueno, pues lo escribo yo 152 00:07:37,410 --> 00:07:39,050 y lo digo yo ahí 153 00:07:39,050 --> 00:07:41,009 pues el nombre de esa variable 154 00:07:41,009 --> 00:07:44,310 ahora a lo mejor os parece un poco raro 155 00:07:44,310 --> 00:07:46,449 porque tiene un punto 156 00:07:46,449 --> 00:07:47,970 y eso es 157 00:07:47,970 --> 00:07:49,850 es este, veis 158 00:07:49,850 --> 00:07:51,889 ahí Java no se ha quejado 159 00:07:51,889 --> 00:07:54,009 yo le he dado un identificador 160 00:07:54,009 --> 00:07:56,370 le he dado un identificador 161 00:07:56,370 --> 00:07:58,449 y me dice 162 00:07:58,449 --> 00:08:00,089 ah si, si, conozco ese identificador 163 00:08:00,089 --> 00:08:02,250 lo conoce, no lo hemos declarado nosotros 164 00:08:02,250 --> 00:08:03,990 pero es uno de los 165 00:08:03,990 --> 00:08:05,490 tropecientos mil 166 00:08:05,490 --> 00:08:08,110 que Java hace aparecer 167 00:08:08,110 --> 00:08:09,970 automáticamente, la máquina virtual de Java 168 00:08:09,970 --> 00:08:12,329 lo hace aparecer automáticamente cuando la aplicación arranca, 169 00:08:12,889 --> 00:08:15,069 y a los que yo puedo recurrir si lo necesito. 170 00:08:16,990 --> 00:08:19,790 Uno obviamente no se los sabe todos de memoria, 171 00:08:20,589 --> 00:08:28,069 pero sí sabe que hay unos cuantos valores a los que puede recurrir siempre si le hacen falta, 172 00:08:28,069 --> 00:08:32,309 y los puede buscar en la documentación. 173 00:08:33,309 --> 00:08:39,789 Este en particular es el nombre identificador que se refiere al mayor valor long almacenable en una variable long. 174 00:08:39,970 --> 00:08:42,649 ¿vale? entonces 175 00:08:42,649 --> 00:08:44,470 ¿por qué lo he quitado? 176 00:08:44,590 --> 00:08:45,190 si lo quiero mostrar 177 00:08:45,190 --> 00:08:52,659 este, vale, vamos a mostrar 178 00:08:52,659 --> 00:08:54,700 también el mínimo, para ver 179 00:08:54,700 --> 00:09:00,759 entonces vamos a ejecutar 180 00:09:00,759 --> 00:09:01,419 este programa 181 00:09:01,419 --> 00:09:04,580 a ver cuál es, min, perdón 182 00:09:04,580 --> 00:09:05,679 he puesto max dos veces 183 00:09:05,679 --> 00:09:08,620 vale, vamos a ejecutar este 184 00:09:08,620 --> 00:09:10,460 programa a ver cuáles son los valores que me da 185 00:09:10,460 --> 00:09:13,100 a ver los que me da 186 00:09:13,100 --> 00:09:16,019 pues venga 187 00:09:16,019 --> 00:09:17,360 lo ejecutamos 188 00:09:17,360 --> 00:09:24,950 este es el mayor valor entero 189 00:09:24,950 --> 00:09:27,470 que yo puedo usar en un programa 190 00:09:27,470 --> 00:09:30,090 si necesito una aplicación 191 00:09:30,090 --> 00:09:34,309 que tenga que trabajar con enteros mayores que este 192 00:09:34,309 --> 00:09:38,149 pues con Java no puedo 193 00:09:38,149 --> 00:09:40,570 o tengo yo que hacer un programa 194 00:09:40,570 --> 00:09:43,649 en el cual lo divida en porciones el numerito 195 00:09:43,649 --> 00:09:45,950 y luego lo construya, pero porque lo haga yo por programa 196 00:09:45,950 --> 00:09:49,450 pero este es el máximo con el que podemos trabajar 197 00:09:49,450 --> 00:09:52,570 Pero hombre, ya es grandote, ya es grande en cualquier aplicación normal 198 00:09:52,570 --> 00:09:58,429 ¿Dónde vamos a tener más de 9.000 billones de no sé qué? 199 00:09:58,690 --> 00:09:59,649 Ya es un numerito grande 200 00:09:59,649 --> 00:10:03,210 Vamos a hacer lo mismo con el entero 201 00:10:03,210 --> 00:10:30,090 Vamos a hacer lo mismo con el entero 202 00:10:30,090 --> 00:10:32,870 Pues el entero, ese nombre, ese identificador 203 00:10:32,870 --> 00:10:36,190 Que usa Java y que es que es así porque es el que usa 204 00:10:36,190 --> 00:10:37,350 No porque a mí me dé la gana 205 00:10:37,350 --> 00:10:39,750 Es este 206 00:10:39,750 --> 00:10:42,230 ¿Vale? Es este 207 00:10:42,230 --> 00:10:49,519 vamos a mirar a ver cuál es el mayor número almacenable en un entero 208 00:10:49,519 --> 00:10:51,320 y el menor número almacenable en un entero 209 00:10:51,320 --> 00:10:54,179 si ejecutamos esto 210 00:10:54,179 --> 00:11:01,649 pues el entero es un poco más pequeñito 211 00:11:01,649 --> 00:11:04,230 como veis, es bastante más pequeño que el long 212 00:11:04,230 --> 00:11:08,529 este es el mayor número almacenable positivo en una variable int 213 00:11:08,529 --> 00:11:09,529 y este es el menor 214 00:11:09,529 --> 00:11:13,730 si nuestra aplicación va a trabajar con números enteros 215 00:11:13,730 --> 00:11:15,990 más grandes de 216 00:11:15,990 --> 00:11:18,570 2000 millones 217 00:11:18,570 --> 00:11:21,590 pues hombre, usámoslo 218 00:11:21,590 --> 00:11:22,610 ¿vale? 219 00:11:24,409 --> 00:11:25,909 pero este ya es un número muy grande 220 00:11:25,909 --> 00:11:27,669 bueno, pues ¿para qué muestro esto? 221 00:11:29,250 --> 00:11:30,909 aparte de para introducir la idea 222 00:11:30,909 --> 00:11:33,389 de que hay un montón de variables ya creadas 223 00:11:33,389 --> 00:11:35,309 a las que yo puedo acceder 224 00:11:35,309 --> 00:11:36,490 si conozco su nombre 225 00:11:36,490 --> 00:11:39,710 y para eso tengo toda la documentación 226 00:11:39,710 --> 00:11:41,190 en la página de Oracle 227 00:11:41,190 --> 00:11:42,669 que me puede interesar 228 00:11:42,669 --> 00:11:44,769 estas pues a lo mejor me puede interesar 229 00:11:44,769 --> 00:11:47,330 la que he dicho antes, vamos a mostrarla por curiosidad 230 00:11:47,330 --> 00:11:48,610 aunque ahora mismo no la vayamos a usar 231 00:11:48,610 --> 00:11:59,419 pues esta 232 00:11:59,419 --> 00:12:01,000 ¿dónde la puede encontrar? 233 00:12:01,179 --> 00:12:02,659 si uno busca en la documentación 234 00:12:02,659 --> 00:12:05,360 pues la puede encontrar bajo este identificador 235 00:12:05,360 --> 00:12:07,960 bajo este identificador lo puede encontrar 236 00:12:07,960 --> 00:12:10,519 ¿por qué estos identificadores 237 00:12:10,519 --> 00:12:11,360 tienen punto? 238 00:12:11,360 --> 00:12:13,000 yo he dicho en su momento 239 00:12:13,000 --> 00:12:15,240 me deberíais decir, oye cuando declaraste variables 240 00:12:15,240 --> 00:12:17,580 el punto no era un carácter válido 241 00:12:17,580 --> 00:12:19,340 eran letras 242 00:12:19,340 --> 00:12:21,179 números, subrayado y dólar 243 00:12:21,179 --> 00:12:24,000 no era un carácter válido 244 00:12:24,000 --> 00:12:25,200 claro 245 00:12:25,200 --> 00:12:27,179 pues porque esto es 246 00:12:27,179 --> 00:12:29,340 esto en realidad es otra cosa 247 00:12:29,340 --> 00:12:31,639 que ya en su momento 248 00:12:31,639 --> 00:12:32,639 explicaremos 249 00:12:32,639 --> 00:12:35,899 lo digo para que si os surge la pregunta 250 00:12:35,899 --> 00:12:37,919 bueno, porque esto es un caso especial 251 00:12:37,919 --> 00:12:39,960 que ya entenderemos por qué, ahora no podemos entenderlo 252 00:12:39,960 --> 00:12:41,840 pero sí, tenemos que saber 253 00:12:41,840 --> 00:12:43,840 porque estamos usando variables 254 00:12:43,840 --> 00:12:45,679 que aparte de las variables 255 00:12:45,679 --> 00:12:47,720 que yo declaro, hay muchas más 256 00:12:47,720 --> 00:12:50,000 que ha hecho aparecer la máquina 257 00:12:50,000 --> 00:12:51,879 virtual, pum, de la nada 258 00:12:51,879 --> 00:12:53,779 cuando el programa arrancó, muchas más 259 00:12:53,779 --> 00:12:56,139 y si yo conozco el nombre de ellas 260 00:12:56,139 --> 00:12:57,679 puedo usarlas para hacer cosas 261 00:12:57,679 --> 00:12:58,879 si conozco el nombre de ellas 262 00:12:58,879 --> 00:13:01,899 bueno, pues en particular, aquí hemos visto unas cuantas 263 00:13:01,899 --> 00:13:04,299 ¿por qué el identificador es tan raro con un punto? 264 00:13:04,700 --> 00:13:05,519 ya lo entenderemos 265 00:13:05,519 --> 00:13:08,000 bueno, vamos a mostrar el pi, a ver el pi este 266 00:13:08,000 --> 00:13:10,120 pues bueno, estos son 267 00:13:10,120 --> 00:13:11,759 los decimales que le da, no le da más 268 00:13:11,759 --> 00:13:13,980 pero bueno, es una precisión suficiente como para hacer 269 00:13:13,980 --> 00:13:16,120 operaciones trigonométricas 270 00:13:16,120 --> 00:13:17,480 ¿vale? 271 00:13:21,159 --> 00:13:22,519 entonces, aquí lo voy a indicar 272 00:13:22,519 --> 00:13:23,039 que 273 00:13:23,039 --> 00:13:29,879 cuando un programa arranca 274 00:13:29,879 --> 00:13:36,470 en la RAM 275 00:13:36,470 --> 00:13:40,879 aparecen 276 00:13:40,879 --> 00:13:44,340 muchas variables 277 00:13:44,340 --> 00:13:47,480 además de las nuestras, claro 278 00:13:47,480 --> 00:13:49,460 no está muy bien expresado, pero bueno 279 00:13:49,460 --> 00:13:52,870 además de las nuestras 280 00:13:52,870 --> 00:13:54,350 a las que podemos acceder con su nombre 281 00:13:54,350 --> 00:13:55,950 bueno, pues entonces 282 00:13:55,950 --> 00:13:58,809 ¿qué relación tiene esto con lo que estábamos viendo 283 00:13:58,809 --> 00:14:00,549 de promoción automática, etcétera? 284 00:14:00,629 --> 00:14:03,950 vale, pues yo he dicho, vamos a asignar 285 00:14:03,950 --> 00:14:05,850 ahora un valor 286 00:14:05,850 --> 00:14:07,690 a mi variable int 287 00:14:07,690 --> 00:14:09,190 número 2 288 00:14:09,190 --> 00:14:10,769 número 2 será entera, ¿verdad? 289 00:14:13,379 --> 00:14:14,779 número 2 es una variable entera 290 00:14:14,779 --> 00:14:17,200 entonces 291 00:14:17,200 --> 00:14:20,899 vale 292 00:14:20,899 --> 00:14:25,320 a la variable entera número 2 293 00:14:25,320 --> 00:14:32,330 le voy a asignar un numerito 294 00:14:32,330 --> 00:14:34,269 mayor que esto 295 00:14:34,269 --> 00:14:35,870 Mayor que esto 296 00:14:35,870 --> 00:14:43,080 Esto tiene 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 297 00:14:43,080 --> 00:14:44,759 1 de 11 cifras 298 00:14:44,759 --> 00:14:48,559 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 299 00:14:48,559 --> 00:14:50,019 Vale 300 00:14:50,019 --> 00:14:52,240 Pues se ha quejado 301 00:14:52,240 --> 00:14:54,620 ¿Vale? Se ha quejado 302 00:14:54,620 --> 00:14:57,299 Y efectivamente si miráis 303 00:14:57,299 --> 00:14:58,720 Bueno, por no... 304 00:14:58,720 --> 00:15:10,960 ¿Vale? Si miráis el mensajito que os pone 305 00:15:10,960 --> 00:15:14,100 efectivamente dice que esto 306 00:15:14,100 --> 00:15:15,879 está fuera del rango 307 00:15:15,879 --> 00:15:16,960 de entero 308 00:15:16,960 --> 00:15:20,460 ¿vale? que está fuera del rango 309 00:15:20,460 --> 00:15:23,750 entonces voy 310 00:15:23,750 --> 00:15:25,850 comentando estas cosas porque son 311 00:15:25,850 --> 00:15:27,809 los típicos errores que pueden 312 00:15:27,809 --> 00:15:30,009 salir al principio cuando uno está haciendo programas 313 00:15:30,009 --> 00:15:31,750 y nos tenemos que ir familiarizando 314 00:15:31,750 --> 00:15:33,730 con las diferentes situaciones que se dan 315 00:15:33,730 --> 00:15:35,730 para cuanto antes 316 00:15:35,730 --> 00:15:37,970 perder el menos tiempo posible con ellas 317 00:15:37,970 --> 00:15:41,309 ¿vale? pues cuidado con esto 318 00:15:41,309 --> 00:15:43,629 entonces hay unos rangos posibles 319 00:15:43,629 --> 00:15:45,529 y uno no se puede pasar 320 00:15:45,529 --> 00:15:47,049 entonces si yo le quito un 1 321 00:15:47,049 --> 00:15:49,330 pues ahora ya sí 322 00:15:49,330 --> 00:15:51,590 ¿vale? 323 00:15:56,070 --> 00:15:57,149 más cosas 324 00:15:57,149 --> 00:15:58,610 que tenéis que saber 325 00:15:58,610 --> 00:15:59,649 os tienen que ir sonando 326 00:15:59,649 --> 00:16:02,110 esta asignación ya sí que es posible 327 00:16:02,110 --> 00:16:03,490 porque este numerito 328 00:16:03,490 --> 00:16:06,590 es menor que este, luego está en rango 329 00:16:06,590 --> 00:16:08,049 dentro de los enteros está en rango 330 00:16:08,049 --> 00:16:09,649 es menor, ¿verdad? está en el rango 331 00:16:09,649 --> 00:16:13,110 vale, entonces nosotros hemos dicho 332 00:16:13,110 --> 00:16:25,529 Cuando Java ve un número entero, lo almacena en los 32 bits, lo almacena en los 32 y lo guarda en la variable número 2, que sea. 333 00:16:26,669 --> 00:16:31,889 Este lo puede almacenar en los 32 bits, perfecto, y lo guarda en la variable número 2. 334 00:16:33,409 --> 00:16:39,649 Vale, pero yo puedo darle la orden de que lo almacene ya directamente en 64 bits. 335 00:16:39,649 --> 00:16:46,200 Por ejemplo, mi variable número 3 336 00:16:46,200 --> 00:16:49,019 Mi variable número 3 337 00:16:49,019 --> 00:16:50,419 Que es esta 338 00:16:50,419 --> 00:16:57,539 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 339 00:16:57,539 --> 00:17:01,659 Vale, siguiente error que podríais no entender 340 00:17:01,659 --> 00:17:05,000 Mi variable número 3 es long, ¿verdad? 341 00:17:06,019 --> 00:17:07,279 Es la que yo he declarado como long 342 00:17:07,279 --> 00:17:09,339 Mi variable número 3 es long 343 00:17:09,339 --> 00:17:12,359 Vos estáis haciendo pruebas con este 344 00:17:12,359 --> 00:17:13,559 Haciendo pruebas con estos 345 00:17:13,559 --> 00:17:15,119 me decís, vamos a ver 346 00:17:15,119 --> 00:17:18,059 el mayor número almacenable en un longe es este 347 00:17:18,059 --> 00:17:21,720 resulta que yo le estoy dando uno 348 00:17:21,720 --> 00:17:23,700 que perfectamente cabe ahí 349 00:17:23,700 --> 00:17:24,839 en un longe 350 00:17:24,839 --> 00:17:27,920 y aún así sigue insistiendo 351 00:17:27,920 --> 00:17:30,160 y se sigue poniendo pesado 352 00:17:30,160 --> 00:17:34,960 se sigue poniendo pesado 353 00:17:34,960 --> 00:17:37,480 con que me salgo del rango 354 00:17:37,480 --> 00:17:40,500 ¿cómo que me salgo del rango? 355 00:17:41,400 --> 00:17:42,500 no me salgo del rango 356 00:17:42,500 --> 00:17:44,460 uno podría pensar, no me salgo 357 00:17:44,460 --> 00:17:47,460 esto cabe en un log 358 00:17:47,460 --> 00:17:48,440 y esta variable es log 359 00:17:48,440 --> 00:17:50,839 claro, pero ese mensaje que te está diciendo 360 00:17:50,839 --> 00:17:53,619 se refiere al primer paso que he dicho 361 00:17:53,619 --> 00:17:55,279 igual lo estoy liando un poco 362 00:17:55,279 --> 00:17:57,420 cuando Java ve un numerito entero 363 00:17:57,420 --> 00:17:59,160 un número entero sin más 364 00:17:59,160 --> 00:18:00,380 una sucesión de números 365 00:18:00,380 --> 00:18:02,700 lo primero que hace es cogerlo 366 00:18:02,700 --> 00:18:05,819 y hacer su codificación en 32 bits 367 00:18:05,819 --> 00:18:07,900 es lo primero que hace, hacer su codificación en 32 bits 368 00:18:07,900 --> 00:18:09,940 y luego ya lo guarda en la variable que sea 369 00:18:09,940 --> 00:18:11,279 que se entera, ningún problema 370 00:18:11,279 --> 00:18:13,619 que es log, tampoco ningún problema 371 00:18:13,619 --> 00:18:15,480 le hace la promoción poniéndole 0 si se acabó 372 00:18:15,480 --> 00:18:17,460 pero lo guarda en una de 32 373 00:18:17,460 --> 00:18:20,059 y aquí ha visto 374 00:18:20,059 --> 00:18:21,539 que esto no le cabe en una de 32 375 00:18:21,539 --> 00:18:23,059 con lo cual no puede 376 00:18:23,059 --> 00:18:26,019 entonces es el error 377 00:18:26,019 --> 00:18:26,680 que nos está diciendo 378 00:18:26,680 --> 00:18:28,980 oye que esto yo es un número entero 379 00:18:28,980 --> 00:18:31,099 lo guardo en una de 32 y es que no me cabe 380 00:18:31,099 --> 00:18:33,579 entonces diríais pues que sentido tiene las variables 381 00:18:33,579 --> 00:18:35,640 long, que sentido tiene si yo no puedo expresarle 382 00:18:35,640 --> 00:18:37,259 un número es que nos falta 383 00:18:37,259 --> 00:18:39,680 esto, la L 384 00:18:39,680 --> 00:18:41,920 me da igual que sea mayúscula 385 00:18:41,920 --> 00:18:43,420 que minúscula como más os guste 386 00:18:43,420 --> 00:18:46,420 cuando queréis alterar ese funcionamiento 387 00:18:46,420 --> 00:18:48,420 y le dais 388 00:18:48,420 --> 00:18:50,339 un numerito a java, un número entero 389 00:18:50,339 --> 00:18:52,140 y le dices, oye java 390 00:18:52,140 --> 00:18:53,299 máquina virtual de java 391 00:18:53,299 --> 00:18:56,259 este número entero que yo te doy 392 00:18:56,259 --> 00:18:58,200 codifícalo en binario 393 00:18:58,200 --> 00:18:59,519 directamente de 64 394 00:18:59,519 --> 00:19:02,140 y luego ya con él 395 00:19:02,140 --> 00:19:03,880 haz lo que toque, llevarlo a variable 396 00:19:03,880 --> 00:19:06,079 llevarlo a donde, ahora lo haces 397 00:19:06,079 --> 00:19:08,220 la segunda parte, pues cuando tú le quieres 398 00:19:08,220 --> 00:19:09,460 alterar ese funcionamiento 399 00:19:09,460 --> 00:19:11,779 y le quieres decir, este numerito 400 00:19:11,779 --> 00:19:14,380 directamente, codificamelo 401 00:19:14,380 --> 00:19:16,380 en 64, le pones una L 402 00:19:16,380 --> 00:19:17,680 después, vale 403 00:19:17,680 --> 00:19:19,240 vamos a indicarlo así 404 00:19:19,240 --> 00:19:23,859 entonces 405 00:19:23,859 --> 00:19:30,480 esta sentencia da error 406 00:19:30,480 --> 00:19:34,599 de compilación 407 00:19:34,599 --> 00:19:39,519 porque 408 00:19:39,519 --> 00:19:41,859 la máquina virtual 409 00:19:41,859 --> 00:19:43,619 de Java, la Java Virtual Machine 410 00:19:43,619 --> 00:19:44,759 la máquina virtual de Java 411 00:19:44,759 --> 00:19:47,019 la JRE también se puede llamar 412 00:19:47,019 --> 00:19:49,660 de Java Runtime Environment, la máquina virtual de Java 413 00:19:49,660 --> 00:19:59,630 trata de 414 00:19:59,630 --> 00:20:01,450 guardar 415 00:20:01,450 --> 00:20:05,099 el número pasado 416 00:20:05,099 --> 00:20:08,660 en 32 bits 417 00:20:08,660 --> 00:20:13,319 trata de guardar en 32 bits 418 00:20:13,319 --> 00:20:14,660 y en 32 bits no le cabe 419 00:20:14,660 --> 00:20:16,799 no le cabe, entonces le da error 420 00:20:16,799 --> 00:20:17,960 no le cabe 421 00:20:17,960 --> 00:20:21,400 entonces, si hacemos esto 422 00:20:21,400 --> 00:20:23,500 de aquí, si añadimos 423 00:20:23,500 --> 00:20:24,380 una L 424 00:20:24,380 --> 00:20:26,900 ahora ya sí 425 00:20:26,900 --> 00:20:29,019 Guarda 426 00:20:29,019 --> 00:20:31,079 El número pasado 427 00:20:31,079 --> 00:20:33,019 Directamente en 64 bits 428 00:20:33,019 --> 00:20:47,140 Lo guarda 429 00:20:47,140 --> 00:20:48,660 Directamente en 64 bits 430 00:20:48,660 --> 00:20:51,099 Vale 431 00:20:51,099 --> 00:20:51,960 Pues entonces 432 00:20:51,960 --> 00:20:54,180 Cuidado con esto 433 00:20:54,180 --> 00:20:55,900 Si uno trabaja con números grandes 434 00:20:55,900 --> 00:20:59,000 Va a tener que ponerles la L 435 00:20:59,000 --> 00:21:00,940 Siempre para indicarle a Java 436 00:21:00,940 --> 00:21:03,539 Que los guarden en 64 bits 437 00:21:03,539 --> 00:21:04,660 Porque si uno le pone la L 438 00:21:04,660 --> 00:21:06,839 Va a estar todo el rato en el orden de compilación 439 00:21:06,839 --> 00:21:08,619 Y una vez que le pongamos la L 440 00:21:08,619 --> 00:21:10,980 Java dice, ah, vale, que quieres que te guarde 64 441 00:21:10,980 --> 00:21:12,180 Vale, te guarde 64 442 00:21:12,180 --> 00:21:14,859 Y con números grandes me refiero a números 443 00:21:14,859 --> 00:21:16,940 Por encima de este, más grandotes que este 444 00:21:16,940 --> 00:21:18,019 Por encima de este 445 00:21:18,019 --> 00:21:20,700 Y ahora hay otra cosa 446 00:21:20,700 --> 00:21:21,500 Es la asignación 447 00:21:21,500 --> 00:21:25,140 Este número ya está guardado en 64 bits 448 00:21:25,140 --> 00:21:26,759 Ya está codificado en 64 449 00:21:26,759 --> 00:21:29,240 Ahora ya el siguiente paso es hacer la asignación 450 00:21:29,240 --> 00:21:31,220 En este caso la asignación 451 00:21:31,220 --> 00:21:33,140 Ningún problema, porque número 3 es long 452 00:21:33,140 --> 00:21:35,039 Perfecto, la asignación ningún problema 453 00:21:35,039 --> 00:21:37,539 pero si a mi se me ocurriera 454 00:21:37,539 --> 00:21:39,720 esto mismo, hacerlo en número 2 455 00:21:39,720 --> 00:21:45,269 esto mismo lo hago en 2 456 00:21:45,269 --> 00:21:47,569 que era int, aquí ya si que se queja 457 00:21:47,569 --> 00:21:49,210 dice, oye yo este número te lo he guardado 458 00:21:49,210 --> 00:21:50,450 en 64 bits, estupendo 459 00:21:50,450 --> 00:21:53,369 pero es que ahora estás tratando de guardar una variable entera 460 00:21:53,369 --> 00:21:55,349 ahora ya a la hora de hacer la asignación 461 00:21:55,349 --> 00:21:57,589 es cuando dice que no, que no puedes 462 00:21:57,589 --> 00:21:59,430 un dato 463 00:21:59,430 --> 00:22:01,849 que ocupa 64 bits 464 00:22:01,849 --> 00:22:03,289 no lo puedes guardar 465 00:22:03,289 --> 00:22:05,109 en una variable entera, ahora te da el problema 466 00:22:05,109 --> 00:22:06,130 que ya conocemos 467 00:22:06,130 --> 00:22:09,109 ¿vale? te dice que no puedes 468 00:22:09,109 --> 00:22:15,329 lo ponemos aquí 469 00:22:15,329 --> 00:22:19,049 error por lo mismo de antes 470 00:22:19,049 --> 00:22:22,849 no puede guardar 471 00:22:22,849 --> 00:22:25,269 64 bits 472 00:22:25,269 --> 00:22:26,829 en variable 473 00:22:26,829 --> 00:22:27,990 de 474 00:22:27,990 --> 00:22:30,990 32 bits porque pierde espacio 475 00:22:30,990 --> 00:22:32,930 ¿vale? lo que me he dicho antes 476 00:22:32,930 --> 00:22:35,589 entonces lo que me da error de compilación 477 00:22:35,589 --> 00:22:36,869 lo voy poniendo en comentarios 478 00:22:36,869 --> 00:22:39,650 para luego poder hacer ejecuciones 479 00:22:39,650 --> 00:22:43,259 no puede, vale 480 00:22:43,259 --> 00:22:45,240 a la inversa hemos visto antes que sí 481 00:22:45,240 --> 00:22:46,559 a la inversa sí, verdad 482 00:22:46,559 --> 00:22:48,319 en número 3 483 00:22:48,319 --> 00:22:49,660 sí que podemos 484 00:22:49,660 --> 00:22:50,880 esto 485 00:22:50,880 --> 00:22:54,180 222 como no tiene el L 486 00:22:54,180 --> 00:22:55,019 no lo tiene 487 00:22:55,019 --> 00:22:57,279 lo guarda en 32 bits 488 00:22:57,279 --> 00:23:00,160 y puede porque no se sale de rango 489 00:23:00,160 --> 00:23:01,440 perfecto, va en 32 490 00:23:01,440 --> 00:23:03,619 y lo asigna número 3 que es long 491 00:23:03,619 --> 00:23:05,880 pero hemos dicho que 492 00:23:05,880 --> 00:23:08,079 asignar 32 bits a variables 64 493 00:23:08,079 --> 00:23:10,039 no hay problema, eso es lo que se llama 494 00:23:10,039 --> 00:23:11,440 promoción automática, ¿verdad? 495 00:23:12,099 --> 00:23:13,980 es lo que hemos dicho justo antes después del recreo 496 00:23:13,980 --> 00:23:15,819 es esto mismo, puede, ¿verdad? 497 00:23:16,440 --> 00:23:17,259 esto sí que puede 498 00:23:17,259 --> 00:23:24,000 vale, bueno pues 499 00:23:24,000 --> 00:23:26,200 ¿qué ocurre en la situación que decíamos antes? 500 00:23:26,960 --> 00:23:28,420 si necesitamos 501 00:23:28,420 --> 00:23:29,980 ¿por qué es que necesitamos? 502 00:23:30,039 --> 00:23:31,660 para que nuestro programa pueda continuar 503 00:23:31,660 --> 00:23:33,099 necesitamos 504 00:23:33,099 --> 00:23:35,980 un número que está guardado 505 00:23:35,980 --> 00:23:37,039 en 64 bits 506 00:23:37,039 --> 00:23:40,039 que me lo han pasado porque 507 00:23:40,039 --> 00:23:42,019 yo he accedido a un software 508 00:23:42,019 --> 00:23:43,700 de otro, lo que sea, me lo han pasado en 509 00:23:43,700 --> 00:23:45,779 64 bits, ¿qué ocurre 510 00:23:45,779 --> 00:23:47,839 si tengo que guardar una variable mía que está declarada 511 00:23:47,839 --> 00:23:50,000 como int y no puedo cambiar la declaración? 512 00:23:50,559 --> 00:23:51,960 La declaración está aquí hecha 513 00:23:51,960 --> 00:23:54,019 al principio y no puedo 514 00:23:54,019 --> 00:23:56,140 cambiarla. ¿Qué ocurre 515 00:23:56,140 --> 00:23:57,619 si yo tengo que hacer eso? 516 00:23:58,559 --> 00:24:00,000 Bueno, pues para saltarnos 517 00:24:00,000 --> 00:24:01,759 eso, podemos hacer una cosa 518 00:24:01,759 --> 00:24:03,920 muy peligrosa que se llama 519 00:24:03,920 --> 00:24:05,440 casting, que vamos a hacerlo. 520 00:24:06,700 --> 00:24:07,900 Vamos a ponerlo así. 521 00:24:10,819 --> 00:24:11,799 ¿Qué podemos hacer 522 00:24:11,799 --> 00:24:12,259 entonces 523 00:24:12,259 --> 00:24:15,140 si queremos asignar 524 00:24:15,140 --> 00:24:19,480 un dato de 525 00:24:19,480 --> 00:24:21,640 64 bits 526 00:24:21,640 --> 00:24:22,920 a una variable 527 00:24:22,920 --> 00:24:25,960 de 32 bits 528 00:24:25,960 --> 00:24:28,440 ¿qué podemos hacer en esta situación? 529 00:24:29,380 --> 00:24:30,259 pues podemos hacer 530 00:24:30,259 --> 00:24:31,759 una cosa 531 00:24:31,759 --> 00:24:34,859 que se llama casting 532 00:24:34,859 --> 00:24:35,720 ¿vale? 533 00:24:36,920 --> 00:24:38,279 se llama casting 534 00:24:38,279 --> 00:24:40,180 conversión 535 00:24:40,180 --> 00:24:44,380 pero 536 00:24:44,380 --> 00:24:46,460 que es muy muy 537 00:24:46,460 --> 00:24:57,140 Solo se hace si tenemos claro que no va a inducir a error, si no es muy peligrosa y es fácil entender por qué. 538 00:25:03,660 --> 00:25:05,519 Vale, pues vamos a hacer un ejemplo. 539 00:25:06,559 --> 00:25:08,759 Recordemos los dos datos con los que estamos trabajando. 540 00:25:08,920 --> 00:25:10,319 Tenemos número 2 y número 1. 541 00:25:12,319 --> 00:25:19,700 A número 2 que es el entero, bueno, a número 2 que es el entero, dejamos como está. 542 00:25:19,700 --> 00:25:25,200 A número 3 le vamos a asignar el numerito este de aquí. 543 00:25:27,519 --> 00:25:32,740 En este caso me da igual poner la L que no ponerla, porque esto sí que cabe en 32 bits. 544 00:25:33,440 --> 00:25:39,420 Entonces si yo no pongo la L, él lo guarda en 32 bits y luego al ver que lo lleva a número 3 ya lo amplía. 545 00:25:39,980 --> 00:25:41,779 Pero el resultado es el mismo, que lo va a ampliar con ceros. 546 00:25:42,339 --> 00:25:49,319 Si le pongo la L, lo que hace es guardarlo directamente en 64 y luego ya lo asigna a número 3. 547 00:25:49,319 --> 00:25:51,240 Me da igual en este caso por la L que no ponerla 548 00:25:51,240 --> 00:25:54,180 Me da igual porque el numerito es más pequeño que esto 549 00:25:54,180 --> 00:25:55,700 Vale 550 00:25:55,700 --> 00:25:57,039 Entonces 551 00:25:57,039 --> 00:25:59,079 Vamos a asignárselo a número 2 552 00:25:59,079 --> 00:26:00,900 Perdón, a número 2 553 00:26:00,900 --> 00:26:03,740 A número 2 le vamos a asignar 554 00:26:03,740 --> 00:26:05,380 Número 3 555 00:26:05,380 --> 00:26:08,539 Aquí es cuando nos dice 556 00:26:08,539 --> 00:26:10,180 El error de compilación 557 00:26:10,180 --> 00:26:11,240 Que tenemos clarísimo 558 00:26:11,240 --> 00:26:13,660 Cuando nos salga y time mismatch 559 00:26:13,660 --> 00:26:14,980 Porque no nos hemos dado cuenta 560 00:26:14,980 --> 00:26:16,099 Automáticamente nos vamos a 561 00:26:16,099 --> 00:26:18,180 ¿Qué estoy haciendo? 562 00:26:19,319 --> 00:26:26,640 Entonces estoy asignando una variable que es long, una variable que es de tipo long o una que es de tipo entero. 563 00:26:27,279 --> 00:26:33,140 A la máquina virtual de Java le da igual si el dato que hay dentro es pequeño, es grande, va a caber, no va a caber, le da igual. 564 00:26:33,819 --> 00:26:42,259 Lo que sabe es que por lo general cortar de 64 a 32 puede que te haga perder información. 565 00:26:43,000 --> 00:26:44,700 En algunos casos al menos puede que te haga. 566 00:26:45,359 --> 00:26:47,140 Entonces él por defecto no te deja hacerlo. 567 00:26:47,140 --> 00:26:49,980 pero resulta que nosotros estamos en una situación en la cual decimos 568 00:26:49,980 --> 00:26:51,900 oye, que yo sé que en la variable número 3 569 00:26:51,900 --> 00:26:53,619 todo lo que va a haber siempre 570 00:26:53,619 --> 00:26:55,880 cabe en 32, nosotros lo sabemos 571 00:26:55,880 --> 00:26:57,700 porque lo sabemos, porque es una restricción 572 00:26:57,700 --> 00:26:59,900 de nuestro código, porque antes de llegar aquí 573 00:26:59,900 --> 00:27:01,599 hemos hecho un if con una condición 574 00:27:01,599 --> 00:27:03,880 porque lo sabemos, porque sabemos 575 00:27:03,880 --> 00:27:05,759 que eso se va a dar, pues entonces 576 00:27:05,759 --> 00:27:07,920 podemos hacer ese casting, porque ese casting 577 00:27:07,920 --> 00:27:09,460 ahora es controlado 578 00:27:09,460 --> 00:27:11,440 lo controlamos nosotros 579 00:27:11,440 --> 00:27:12,559 ¿y cómo se hace un casting? 580 00:27:13,460 --> 00:27:14,660 pues un casting se hace 581 00:27:14,660 --> 00:27:17,660 se pone entre paréntesis delante 582 00:27:17,660 --> 00:27:19,720 del valor 583 00:27:19,720 --> 00:27:21,539 que no se corresponde en tipo 584 00:27:21,539 --> 00:27:23,619 con el que doy, se pone delante 585 00:27:23,619 --> 00:27:26,099 el tipo de dato al que yo lo quiero convertir 586 00:27:26,099 --> 00:27:27,539 y ala 587 00:27:27,539 --> 00:27:29,640 automáticamente se me quita el error 588 00:27:29,640 --> 00:27:30,339 de compilación 589 00:27:30,339 --> 00:27:33,240 ¿vale? entonces ¿qué hemos hecho aquí? 590 00:27:38,609 --> 00:27:39,349 un casting 591 00:27:39,349 --> 00:27:42,450 estamos convirtiendo el valor de número 3 592 00:27:42,450 --> 00:27:44,069 que es long a int 593 00:27:44,069 --> 00:27:46,049 entonces un casting 594 00:27:46,049 --> 00:27:48,329 es tan radical como 595 00:27:48,329 --> 00:27:50,349 meter la tijera 596 00:27:50,349 --> 00:27:52,450 los casting 597 00:27:52,450 --> 00:27:53,990 lo que hacen es 598 00:27:53,990 --> 00:27:56,490 que tú quieres convertir de aquí a aquí 599 00:27:56,490 --> 00:27:57,410 yo te lo convierto 600 00:27:57,410 --> 00:27:59,849 que lo que te devuelva tenga sentido 601 00:27:59,849 --> 00:28:01,089 es tu problema 602 00:28:01,089 --> 00:28:03,509 un casting es, meto la tijera 603 00:28:03,509 --> 00:28:05,750 hago lo que haga falta 604 00:28:05,750 --> 00:28:06,730 y yo te lo convierto 605 00:28:06,730 --> 00:28:09,609 pues en el casting concreto 606 00:28:09,609 --> 00:28:11,390 de convertir de long a int 607 00:28:11,390 --> 00:28:13,670 y la conversión es a int porque se indica así 608 00:28:13,670 --> 00:28:15,650 entre paréntesis 609 00:28:15,650 --> 00:28:16,769 el tipo de dato 610 00:28:16,769 --> 00:28:19,650 Vale, el casting siempre se hace de esta manera 611 00:28:19,650 --> 00:28:21,829 El casting siempre se hace 612 00:28:21,829 --> 00:28:25,029 Se pone entre paréntesis 613 00:28:25,029 --> 00:28:29,349 Se pone delante del valor a convertir 614 00:28:29,349 --> 00:28:35,039 Convertir 615 00:28:35,039 --> 00:28:39,710 El tipo final al que vamos a convertir 616 00:28:39,710 --> 00:28:40,890 Entre paréntesis 617 00:28:40,890 --> 00:28:44,339 Así se hace el casting 618 00:28:44,339 --> 00:28:46,700 Bueno, pues el casting es estupendo 619 00:28:46,700 --> 00:28:49,839 Cojo número 3, que son sus 64 bits 620 00:28:49,839 --> 00:28:51,420 Meto la tijera 621 00:28:51,420 --> 00:28:53,440 los 32 más significativos fuera 622 00:28:53,440 --> 00:28:55,819 y lo que quede te lo guardo en número 2 623 00:28:55,819 --> 00:28:57,039 eso es un casting 624 00:28:57,039 --> 00:29:00,279 ¿qué ocurre? que si el numerito era inferior 625 00:29:00,279 --> 00:29:02,220 a lo que cabe en 32 bits 626 00:29:02,220 --> 00:29:02,960 ningún problema 627 00:29:02,960 --> 00:29:05,240 entonces si nosotros sabemos 628 00:29:05,240 --> 00:29:07,619 porque lo sabemos, porque hemos hecho la comprobación 629 00:29:07,619 --> 00:29:09,240 con un menor que por lo que sea 630 00:29:09,240 --> 00:29:10,980 que no pasa nada 631 00:29:10,980 --> 00:29:12,640 pues hacemos el casting 632 00:29:12,640 --> 00:29:16,059 y nos saltamos este error de compilación 633 00:29:16,059 --> 00:29:17,720 que nos impediría seguir trabajando 634 00:29:17,720 --> 00:29:18,539 en nuestro programa 635 00:29:18,539 --> 00:29:20,660 nos impediría seguir trabajando 636 00:29:20,660 --> 00:29:22,440 pues ya hago el casting 637 00:29:22,440 --> 00:29:24,359 y ya no me impide seguir trabajando 638 00:29:24,359 --> 00:29:25,160 vale 639 00:29:25,160 --> 00:29:28,460 entonces si yo ahora muestro 640 00:29:28,460 --> 00:29:30,039 el contenido de número 2 641 00:29:30,039 --> 00:29:34,579 vamos a mostrar 642 00:29:34,579 --> 00:29:36,220 el contenido de número 3 643 00:29:36,220 --> 00:29:38,000 y el contenido de número 2 644 00:29:38,000 --> 00:29:48,940 vamos a poner aquí 645 00:29:48,940 --> 00:29:50,920 el contenido de número 3 646 00:29:50,920 --> 00:29:51,759 y el de 647 00:29:51,759 --> 00:29:55,740 número 2 648 00:29:55,740 --> 00:29:57,980 van a ser los dos números que me salgan al final 649 00:29:57,980 --> 00:30:00,599 pues vamos a ver que los dos tienen el mismo valor 650 00:30:00,599 --> 00:30:02,400 porque aunque yo he hecho el casting 651 00:30:02,400 --> 00:30:03,680 el casting no ha roto nada 652 00:30:03,680 --> 00:30:07,059 vamos a comprobarlo 653 00:30:07,059 --> 00:30:10,279 efectivamente 654 00:30:10,279 --> 00:30:12,539 este casting no ha inducido 655 00:30:12,539 --> 00:30:13,960 ningún error en mi programa 656 00:30:13,960 --> 00:30:14,920 no ha hecho nada raro 657 00:30:14,920 --> 00:30:17,440 este casting 658 00:30:17,440 --> 00:30:20,380 número 3 tenía 7654 659 00:30:20,380 --> 00:30:22,500 y número 2 660 00:30:22,500 --> 00:30:24,720 que yo lo he obtenido 661 00:30:24,720 --> 00:30:25,680 con esta asignación 662 00:30:25,680 --> 00:30:28,519 número 2 sigue teniendo 7654 663 00:30:28,519 --> 00:30:29,339 estupendo 664 00:30:29,339 --> 00:30:32,339 en este caso el programa no ha hecho nada raro 665 00:30:32,339 --> 00:30:35,640 podemos continuar contando con que todo va a ir bien 666 00:30:35,640 --> 00:30:37,559 luego este es un casting 667 00:30:37,559 --> 00:30:40,200 con criterio 668 00:30:40,200 --> 00:30:41,400 con criterio 669 00:30:41,400 --> 00:30:42,200 vale 670 00:30:42,200 --> 00:30:45,579 pero vamos a repetir ahora mismo 671 00:30:45,579 --> 00:30:48,000 un ejemplo pues sin criterio 672 00:30:48,000 --> 00:30:52,650 vale 673 00:30:52,650 --> 00:30:54,650 vamos a volver a darle a número 3 674 00:30:54,650 --> 00:30:55,150 otro valor 675 00:30:55,150 --> 00:30:57,509 pero ahora le voy a dar un valor 676 00:30:57,509 --> 00:31:00,750 gordote 677 00:31:00,750 --> 00:31:03,809 vale, o sea este valor no cabe en un entero 678 00:31:03,809 --> 00:31:05,130 no cabe en un entero 679 00:31:05,130 --> 00:31:07,390 Pero aquí no hay ningún problema 680 00:31:07,390 --> 00:31:08,650 Yo le he dicho, guárdalo 681 00:31:08,650 --> 00:31:10,109 Si yo le hubiera quitado el L 682 00:31:10,109 --> 00:31:12,009 Recordad que aquí sí que me diría 683 00:31:12,009 --> 00:31:15,250 Uy, que yo no puedo guardarte esto en 32 bits 684 00:31:15,250 --> 00:31:16,730 Digo, no quiero que lo hagas 685 00:31:16,730 --> 00:31:18,849 Tú guárdalo directamente en 64 686 00:31:18,849 --> 00:31:20,690 Vale, directamente en 64 687 00:31:20,690 --> 00:31:23,150 Y ahora llévalo a número 3 que es 64 688 00:31:23,150 --> 00:31:24,210 Nada, todo estupendo 689 00:31:24,210 --> 00:31:26,349 Ahora, vamos a volver a hacer lo mismo 690 00:31:26,349 --> 00:31:29,430 Vamos a tratar de llevar número 3 a número 2 691 00:31:29,430 --> 00:31:30,710 Él me va a decir 692 00:31:30,710 --> 00:31:32,390 No puedo, número 3 es long 693 00:31:32,390 --> 00:31:34,329 No puedo guardarlo en número 2, no puedo 694 00:31:34,329 --> 00:31:36,269 vale, vamos a hacerle el casting 695 00:31:36,269 --> 00:31:38,809 para saltarnos este problema 696 00:31:38,809 --> 00:31:41,009 no pasa nada, conviérteme el valor 697 00:31:41,009 --> 00:31:42,609 que haya en número 3, sea el que sea 698 00:31:42,609 --> 00:31:44,329 conviértemelo entero 699 00:31:44,329 --> 00:31:47,269 el, paz, mete la tijera 700 00:31:47,269 --> 00:31:49,490 le quita los bits que hagan falta 701 00:31:49,490 --> 00:31:51,089 lo deja en 32 y lo lleva entero 702 00:31:51,089 --> 00:31:53,089 pero en este caso la ha liado 703 00:31:53,089 --> 00:31:55,210 porque obviamente ha perdido 704 00:31:55,210 --> 00:31:56,730 el número original 705 00:31:56,730 --> 00:31:59,650 porque es que es imposible que este número quepa en 32 bits 706 00:31:59,650 --> 00:32:02,049 vale, si vamos a ejecutar esto 707 00:32:02,049 --> 00:32:07,420 ¿Vale? Si vamos a ejecutarlo 708 00:32:07,420 --> 00:32:09,680 Este era el número original 709 00:32:09,680 --> 00:32:13,059 Y después de hacer esta asignación 710 00:32:13,059 --> 00:32:15,680 Este número ya ha perdido todo el sentido 711 00:32:15,680 --> 00:32:16,640 Lo ha perdido 712 00:32:16,640 --> 00:32:19,660 A partir de aquí el programa ya no tiene ningún sentido 713 00:32:19,660 --> 00:32:21,460 Porque esta asignación 714 00:32:21,460 --> 00:32:22,160 Ya 715 00:32:22,160 --> 00:32:23,559 ¿Vale? 716 00:32:24,539 --> 00:32:26,819 Bueno, conclusión 717 00:32:26,819 --> 00:32:28,599 Hay que entender que es un casting 718 00:32:28,599 --> 00:32:30,579 Con esto que estamos hablando 719 00:32:30,579 --> 00:32:34,059 De asignación con compatibilidad de tipos 720 00:32:34,059 --> 00:32:35,240 que un casting te permite 721 00:32:35,240 --> 00:32:38,480 que este tipo de datos no es del mismo valor que otro 722 00:32:38,480 --> 00:32:39,400 no pasa nada 723 00:32:39,400 --> 00:32:41,599 pongo entre paréntesis el tipo al que quiero llegar 724 00:32:41,599 --> 00:32:43,220 y Java te lo convierte 725 00:32:43,220 --> 00:32:45,359 pero te lo convierte 726 00:32:45,359 --> 00:32:48,380 en muchos casos perdiendo información 727 00:32:48,380 --> 00:32:50,079 y destrozándote 728 00:32:50,079 --> 00:32:51,180 a partir de ahí el programa 729 00:32:51,180 --> 00:32:53,460 entonces 730 00:32:53,460 --> 00:32:56,759 en este caso 731 00:32:56,759 --> 00:33:00,119 perdemos información 732 00:33:00,119 --> 00:33:01,660 ¿vale? en este caso 733 00:33:01,660 --> 00:33:10,200 pues cuidado con los castings 734 00:33:10,200 --> 00:33:10,599 porque 735 00:33:10,599 --> 00:33:19,869 los castings son tan cómodos que son 736 00:33:19,869 --> 00:33:22,329 el recurso ideal del compilador 737 00:33:22,329 --> 00:33:24,109 yo ya os he dicho que cuando 738 00:33:24,109 --> 00:33:25,630 el compilador vuelve de compilación 739 00:33:25,630 --> 00:33:26,910 te lo pone en rojo 740 00:33:26,910 --> 00:33:29,509 y no solo te dice 741 00:33:29,509 --> 00:33:32,450 que no le gusta, sino que encima te da sugerencias 742 00:33:32,450 --> 00:33:33,829 ¿vale? 743 00:33:33,849 --> 00:33:34,930 por ejemplo en este caso 744 00:33:34,930 --> 00:33:39,039 que hemos visto en este caso 745 00:33:39,039 --> 00:33:40,660 el compilador de compilación, ¿está claro? 746 00:33:41,400 --> 00:33:42,180 entonces si yo 747 00:33:42,180 --> 00:33:47,839 le pido ayuda al compilador 748 00:33:47,839 --> 00:33:48,660 le pido ayuda 749 00:33:48,660 --> 00:33:51,740 y se la pido poniendo aquí 750 00:33:51,740 --> 00:33:53,660 él la ayuda que me dice es 751 00:33:53,660 --> 00:33:55,359 no puedo 752 00:33:55,359 --> 00:33:57,619 los tipos no encajan 753 00:33:57,619 --> 00:33:59,339 no puedo convertir de lonja entero 754 00:33:59,339 --> 00:34:00,619 él me da la información 755 00:34:00,619 --> 00:34:03,200 si luego además hago clic 756 00:34:03,200 --> 00:34:05,880 ahora deposito la mano sin más 757 00:34:05,880 --> 00:34:07,519 si luego además hago clic 758 00:34:07,519 --> 00:34:09,099 él 759 00:34:09,099 --> 00:34:11,440 me ofrece cosas 760 00:34:11,440 --> 00:34:13,099 que arregla el orden de compilación 761 00:34:13,099 --> 00:34:13,840 me las ofrece 762 00:34:13,840 --> 00:34:17,780 y yo si pincho 763 00:34:17,780 --> 00:34:19,719 él automáticamente me hace el cambio 764 00:34:19,719 --> 00:34:21,820 me las ofrece, por ejemplo 765 00:34:21,820 --> 00:34:23,960 aquí me ha ofrecido añadir un cast a end 766 00:34:23,960 --> 00:34:25,639 entonces yo pincho, hago doble clic 767 00:34:25,639 --> 00:34:27,820 y me lo hace 768 00:34:27,820 --> 00:34:29,800 a ver 769 00:34:29,800 --> 00:34:30,780 ¿qué quiero decir con esto? 770 00:34:32,139 --> 00:34:33,179 que lo de 771 00:34:33,179 --> 00:34:35,420 pon un casting, pon un casting es 772 00:34:35,420 --> 00:34:36,820 la solución para todo 773 00:34:36,820 --> 00:34:39,579 del eclipse, que esto 774 00:34:39,579 --> 00:34:41,460 hay una red de compilación, haz un casting 775 00:34:41,460 --> 00:34:43,679 claro, con un casting se acaba todo 776 00:34:43,679 --> 00:34:45,139 todos los problemas, todos se han acabado 777 00:34:45,139 --> 00:34:47,719 pero el programa casi seguro 778 00:34:47,719 --> 00:34:50,920 ha dejado de tener todo el sentido del mundo 779 00:34:50,920 --> 00:34:54,019 entonces, este es un ejemplo en el cual 780 00:34:54,019 --> 00:34:59,659 no hay que recurrir a las soluciones que da el Eclipse 781 00:34:59,659 --> 00:35:03,320 claro, las que te da te quitan el error de compilación 782 00:35:03,320 --> 00:35:07,380 pero te han cambiado el programa y te lo han destrozado 783 00:35:07,380 --> 00:35:09,639 en prácticamente la mayoría de los casos 784 00:35:09,639 --> 00:35:15,880 entonces, solo usemos las posibles soluciones que te sugiere 785 00:35:15,880 --> 00:35:18,139 el entorno de desarrollo cuando tengamos 786 00:35:18,139 --> 00:35:19,599 clarísimo que es la que nosotros queremos 787 00:35:19,599 --> 00:35:22,159 porque si no nos vale para nada 788 00:35:22,159 --> 00:35:24,480 no nos vale para nada quitar errores de compilación 789 00:35:24,480 --> 00:35:26,380 lo digo porque os encanta 790 00:35:26,380 --> 00:35:28,059 en general, generalizando 791 00:35:28,059 --> 00:35:30,019 me daba un error pero dice así 792 00:35:30,019 --> 00:35:30,579 y se quitó 793 00:35:30,579 --> 00:35:33,019 si el error de compilación se quitó 794 00:35:33,019 --> 00:35:35,480 pero se acabó, no sigas programando 795 00:35:35,480 --> 00:35:37,059 porque lo que haces ya no tiene ningún sentido 796 00:35:37,059 --> 00:35:39,780 programar no es quitar errores de compilación 797 00:35:39,780 --> 00:35:42,159 no es eso, es hacer códigos 798 00:35:42,159 --> 00:35:43,800 que cumplan su función 799 00:35:43,800 --> 00:35:45,059 cuando se están ejecutando 800 00:35:45,059 --> 00:35:46,800 que hagan lo que tienen que hacer 801 00:35:46,800 --> 00:35:48,880 eso es programar, hacer un software 802 00:35:48,880 --> 00:35:51,900 que hace lo que me han pedido cuando se está ejecutando 803 00:35:51,900 --> 00:35:53,199 no que compila 804 00:35:53,199 --> 00:35:55,579 un software que compila es muy fácil de hacer 805 00:35:55,579 --> 00:35:57,239 que luego cumpla su función 806 00:35:57,239 --> 00:35:58,860 eso ya no es tan fácil 807 00:35:58,860 --> 00:36:00,400 ¿vale? 808 00:36:02,400 --> 00:36:03,840 bueno, pues en este caso 809 00:36:03,840 --> 00:36:06,139 este casting 810 00:36:06,139 --> 00:36:07,880 a lo mejor si nos puede 811 00:36:07,880 --> 00:36:09,500 interesar, hay un caso en el cual 812 00:36:09,500 --> 00:36:11,679 a mí me lo han pasado en loan, yo he verificado 813 00:36:11,679 --> 00:36:13,260 que nunca se va a pasar de cierto valor 814 00:36:13,260 --> 00:36:15,460 en este caso me puede interesar, hay casos en los que me puede interesar 815 00:36:15,460 --> 00:36:16,860 pero si me interesa 816 00:36:16,860 --> 00:36:18,880 yo tengo que saberlo y hacerlo 817 00:36:18,880 --> 00:36:21,480 y hay veces que no me queda más remedio que hacer un casting para seguir 818 00:36:21,480 --> 00:36:23,599 pues si no me queda más remedio que hacer un casting 819 00:36:23,599 --> 00:36:24,639 lo hago, pero con cuidado 820 00:36:24,639 --> 00:36:28,340 bueno, pues en cuanto a enteros 821 00:36:28,340 --> 00:36:29,699 estos son los matices 822 00:36:29,699 --> 00:36:30,599 de los que hablamos 823 00:36:30,599 --> 00:36:33,880 más o menos está todo recogido en estas situaciones 824 00:36:33,880 --> 00:36:35,079 que hemos especificado 825 00:36:35,079 --> 00:36:36,780 está todo recogido, sí, dime 826 00:36:36,780 --> 00:36:44,099 este proyecto entero 827 00:36:44,099 --> 00:36:45,760 con todos los ejemplos, lo voy a subir a la aula virtual 828 00:36:45,760 --> 00:36:47,599 ¿vale? lo voy a subir a aula virtual 829 00:36:47,599 --> 00:36:51,460 sí, por eso estoy 830 00:36:51,460 --> 00:36:53,039 comentándolo todo lo que puedo 831 00:36:53,039 --> 00:36:54,579 para subirlo todo a la aula virtual 832 00:36:54,579 --> 00:37:00,030 vale, bueno pues en cuanto a enteros 833 00:37:00,030 --> 00:37:01,889 práctica de todos los matices que hay 834 00:37:01,889 --> 00:37:02,889 vienen por aquí 835 00:37:02,889 --> 00:37:05,849 no hay duda, ¿no? 836 00:37:06,449 --> 00:37:08,610 y los decimales es un poquito parecido 837 00:37:08,610 --> 00:37:10,809 con los decimales es un poco parecido 838 00:37:10,809 --> 00:37:12,389 ¿vale? vamos a 839 00:37:12,389 --> 00:37:14,750 pasar a los decimales 840 00:37:14,750 --> 00:37:18,090 ¿vale? 841 00:37:18,090 --> 00:37:20,409 voy a poner aquí 842 00:37:20,409 --> 00:37:23,719 eh 843 00:37:23,719 --> 00:37:27,239 voy a comentarlo como 844 00:37:27,239 --> 00:37:34,360 ejemplos 845 00:37:34,360 --> 00:37:35,840 con enteros 846 00:37:35,840 --> 00:37:37,420 vale 847 00:37:37,420 --> 00:37:45,480 vale, vámonos ahora 848 00:37:45,480 --> 00:37:47,960 después de todo este chorizo de aquí 849 00:37:47,960 --> 00:37:53,070 vámonos a ejemplos 850 00:37:53,070 --> 00:37:54,010 con decimales 851 00:37:54,010 --> 00:38:05,929 yo sé que ahora al principio es un rollo 852 00:38:05,929 --> 00:38:06,929 y hablo mucho 853 00:38:06,929 --> 00:38:09,610 pero es que de verdad 854 00:38:09,610 --> 00:38:10,869 al principio no queda más remedio 855 00:38:10,869 --> 00:38:12,789 ya vosotros tendréis ya tiempo de trabajar 856 00:38:12,789 --> 00:38:16,329 Y hacer cosas dentro de no mucho 857 00:38:16,329 --> 00:38:17,090 Pero ahora mismo 858 00:38:17,090 --> 00:38:20,150 Vale 859 00:38:20,150 --> 00:38:25,139 Variables para guardar tipos decimales 860 00:38:25,139 --> 00:38:26,820 Vimos dos, float y double 861 00:38:26,820 --> 00:38:29,380 Double permiten más cifras decimales 862 00:38:29,380 --> 00:38:30,239 Que el float, ¿vale? 863 00:38:30,260 --> 00:38:31,900 Porque una es 64 y otra es 128 864 00:38:31,900 --> 00:38:34,500 Juraría, una es 64 y otra es 128 865 00:38:34,500 --> 00:38:36,719 Creo que es una 64 y otra es 128 866 00:38:36,719 --> 00:38:39,099 Vamos a comprobarlo rápidamente 867 00:38:39,099 --> 00:38:40,519 Vamos a 868 00:38:40,519 --> 00:38:43,940 Porque me lío con los int 869 00:38:43,940 --> 00:39:18,289 A ver, longitud, dato, floa, a ver si es 32 o 64, exponente y mantisa, 32, vale, pues entonces es 64 dabel y 32 floa, vale, vale, la única diferencia es la precisión en las cifras decimales que dejan, ¿no? 870 00:39:18,289 --> 00:39:21,329 entonces, bueno, una cosa que no he dicho 871 00:39:21,329 --> 00:39:23,030 que no he dicho, que he dado por 872 00:39:23,030 --> 00:39:25,090 supuesta, pero no debería 873 00:39:25,090 --> 00:39:27,170 cuando uno declara 874 00:39:27,170 --> 00:39:29,210 una variable, la declaración de variable 875 00:39:29,210 --> 00:39:30,969 se puede hacer en cualquier punto del programa 876 00:39:30,969 --> 00:39:32,230 no hace falta que se haga en el principio 877 00:39:32,230 --> 00:39:34,590 uno puede declarar una variable cuando dé la gana 878 00:39:34,590 --> 00:39:36,449 que aquí de repente me interesa a mí 879 00:39:36,449 --> 00:39:38,789 bueno, de hecho ya lo hemos hecho aquí, ¿verdad? 880 00:39:40,489 --> 00:39:41,090 aquí hemos 881 00:39:41,090 --> 00:39:41,750 declarado 882 00:39:41,750 --> 00:39:45,030 una variable long aquí en medio, por las buenas 883 00:39:45,030 --> 00:39:46,969 ¿vale? no hay ningún problema 884 00:39:46,969 --> 00:40:02,110 En C y en lenguajes, los primeros lenguajes estructurados, pues por organización te decían que declaras las variables al principio, pero no, las puedes declarar cuando quieras, ¿vale? Cuando quieras. 885 00:40:02,110 --> 00:40:05,489 Bueno, pues en cuanto a variables, decimales y float 886 00:40:05,489 --> 00:40:09,159 Double y float 887 00:40:09,159 --> 00:40:13,000 Pues lo mismo, yo puedo tener aquí una variable double 888 00:40:13,000 --> 00:40:16,019 Decimal 1 889 00:40:16,019 --> 00:40:20,199 Y una variable float 890 00:40:20,199 --> 00:40:22,199 Decimal 2 891 00:40:22,199 --> 00:40:27,980 Bueno, pues esto tiene pocos matices 892 00:40:27,980 --> 00:40:33,280 Es que es lo mismo, equivalente a los números int y long 893 00:40:33,280 --> 00:40:36,239 Que son los que más se usan 894 00:40:36,239 --> 00:40:36,940 Equivalente 895 00:40:36,940 --> 00:40:41,480 Que yo le quiero asignar un valor a decimal 1 896 00:40:41,480 --> 00:40:42,500 Dabel 897 00:40:42,500 --> 00:40:44,579 Pues recordad 898 00:40:44,579 --> 00:40:46,619 Que la coma decimal 899 00:40:46,619 --> 00:40:50,460 Es el punto 900 00:40:50,460 --> 00:40:51,639 ¿Vale? 901 00:40:52,340 --> 00:40:54,199 Que la coma decimal es el punto 902 00:40:54,199 --> 00:41:01,679 Que yo le quiero asignar un valor a decimal 2 903 00:41:01,679 --> 00:41:06,619 ¿Vale? 904 00:41:06,619 --> 00:41:08,800 decimal 2 905 00:41:08,800 --> 00:41:09,639 es un número decimal 906 00:41:09,639 --> 00:41:12,099 también en principio tendría una coma 907 00:41:12,099 --> 00:41:14,780 pero, ¿qué ocurre? 908 00:41:15,619 --> 00:41:16,320 que aquí 909 00:41:16,320 --> 00:41:19,059 ocurre lo contrario 910 00:41:19,059 --> 00:41:21,059 que con los enteros y long 911 00:41:21,059 --> 00:41:22,679 con los enteros y long 912 00:41:22,679 --> 00:41:23,639 si tú le dabas un número 913 00:41:23,639 --> 00:41:27,119 él por defecto te lo guarda en 32 bits 914 00:41:27,119 --> 00:41:28,239 por defecto 915 00:41:28,239 --> 00:41:29,659 y si tú quieres que te lo guarde en 64 916 00:41:29,659 --> 00:41:30,860 le tienes que poner una L 917 00:41:30,860 --> 00:41:33,139 aquí es justo al revés 918 00:41:33,139 --> 00:41:35,360 si tú no le dices nada 919 00:41:35,360 --> 00:41:38,539 él por defecto te lo guarda en double 920 00:41:38,539 --> 00:41:40,179 es decir, en 64 921 00:41:40,179 --> 00:41:40,880 en double 922 00:41:40,880 --> 00:41:44,219 entonces, si yo guardo en decimal 1 923 00:41:44,219 --> 00:41:46,079 no hay ningún problema 924 00:41:46,079 --> 00:41:48,000 me lo está guardando en un double, cabe 925 00:41:48,000 --> 00:41:50,539 pero si guardo en decimal 2, que es un float 926 00:41:50,539 --> 00:41:52,420 me dice, oye, que ese 65,6 927 00:41:52,420 --> 00:41:53,019 que me has dado 928 00:41:53,019 --> 00:41:56,619 aunque me cabría en 32, porque la precisión 929 00:41:56,619 --> 00:41:58,340 decimal es muy pequeña, aunque me cabría 930 00:41:58,340 --> 00:42:00,480 como no me has dicho nada, te lo guardo en 64 931 00:42:00,480 --> 00:42:02,079 y ahora ya de 64 932 00:42:02,079 --> 00:42:03,440 a float no puedo 933 00:42:03,440 --> 00:42:06,099 bueno, pues si le ponemos una F 934 00:42:06,099 --> 00:42:07,940 alteramos ese funcionamiento 935 00:42:07,940 --> 00:42:10,440 en este caso le ponemos una F de float 936 00:42:10,440 --> 00:42:11,340 vale 937 00:42:11,340 --> 00:42:14,239 si le ponemos una F 938 00:42:14,239 --> 00:42:15,360 estamos diciendo, oye 939 00:42:15,360 --> 00:42:17,739 este 65,6 940 00:42:17,739 --> 00:42:20,539 por favor, guárdalo ya de partida 941 00:42:20,539 --> 00:42:21,900 32 bits 942 00:42:21,900 --> 00:42:24,519 y ahora ya a decimal 2 943 00:42:24,519 --> 00:42:26,599 puede ir sin ningún problema, porque decimal 2 es float 944 00:42:26,599 --> 00:42:30,980 y lo que es más, también podría ir a decimal 1 945 00:42:30,980 --> 00:42:32,219 vale 946 00:42:32,219 --> 00:42:35,300 porque decimal 1 es dabel 947 00:42:35,300 --> 00:42:35,900 pero 948 00:42:35,900 --> 00:42:38,739 de float a dabel se puede 949 00:42:38,739 --> 00:42:40,800 igual que de int a long se puede 950 00:42:40,800 --> 00:42:43,340 porque eso se puede 951 00:42:43,340 --> 00:42:45,219 hacer una promoción automática que se llama 952 00:42:45,219 --> 00:42:47,500 porque de float a dabel no pierdo 953 00:42:47,500 --> 00:42:49,460 precisión, el numerito no pierde información 954 00:42:49,460 --> 00:42:50,780 de float a dabel puedo 955 00:42:50,780 --> 00:42:52,719 pero al revés no 956 00:42:52,719 --> 00:42:55,400 ¿vale? al revés no 957 00:42:55,400 --> 00:42:57,400 si yo 958 00:42:57,400 --> 00:42:58,559 intento hacer esto 959 00:42:58,559 --> 00:43:03,690 a decimal 2 que es dabel 960 00:43:03,690 --> 00:43:05,650 guardarle decimal 1 961 00:43:05,650 --> 00:43:07,969 perdón, a decimal 2 que es float 962 00:43:07,969 --> 00:43:09,869 guardarle decimal 1 que es double 963 00:43:09,869 --> 00:43:11,710 me dice que no puede 964 00:43:11,710 --> 00:43:13,789 porque de double a float 965 00:43:13,789 --> 00:43:14,769 tendría que hacer 966 00:43:14,769 --> 00:43:16,909 podría perder información 967 00:43:16,909 --> 00:43:18,210 no me deja 968 00:43:18,210 --> 00:43:21,989 que yo quiero aún así guardarlo 969 00:43:21,989 --> 00:43:23,150 porque tengo esa restricción 970 00:43:23,150 --> 00:43:25,449 y sé que 56,5 971 00:43:25,449 --> 00:43:26,869 va a caber en float 972 00:43:26,869 --> 00:43:28,550 porque la precisión es pequeña 973 00:43:28,550 --> 00:43:29,969 es solo una cifra que quiero 974 00:43:29,969 --> 00:43:32,349 no pasa nada, le hago un casting 975 00:43:32,349 --> 00:43:34,309 le hago un casting a float 976 00:43:34,309 --> 00:43:36,530 y ala, el compilador se calla 977 00:43:36,530 --> 00:43:38,510 en este caso 978 00:43:38,510 --> 00:43:41,250 ese casting no habrá dado pérdida de información 979 00:43:41,250 --> 00:43:42,670 porque 56.5 980 00:43:42,670 --> 00:43:44,730 cabe en float 981 00:43:44,730 --> 00:43:47,929 que es un número de pocas cifras decimales 982 00:43:47,929 --> 00:43:49,309 cabe en float 983 00:43:49,309 --> 00:43:50,050 en este caso no 984 00:43:50,050 --> 00:43:52,909 pero si fuera un numerito que no cabe en float 985 00:43:52,909 --> 00:43:56,210 al hacer el casting 986 00:43:56,210 --> 00:43:57,550 se perdería 987 00:43:57,550 --> 00:44:00,630 pues esto es lo mismo 988 00:44:00,630 --> 00:44:02,150 estoy repitiendo lo mismo que con indilo 989 00:44:02,150 --> 00:44:03,550 Lo mismo, pero con float y dabel. 990 00:44:03,989 --> 00:44:07,489 Dabel más preciso, 64, y float menos con 32. 991 00:44:07,730 --> 00:44:08,050 Lo mismo. 992 00:44:08,989 --> 00:44:13,730 Que de partida, cuando Java ve un número decimal, 993 00:44:14,389 --> 00:44:17,429 de partida lo interpreta como dabel, lo guarda en 64. 994 00:44:17,989 --> 00:44:20,190 Si yo le pongo el F, entonces ya no. 995 00:44:20,710 --> 00:44:21,730 Lo guarda en 32. 996 00:44:22,269 --> 00:44:22,670 Lo mismo. 997 00:44:25,429 --> 00:44:25,650 ¿Vale? 998 00:44:26,510 --> 00:44:28,150 Podemos ver, y ya con esto paramos. 999 00:44:28,150 --> 00:44:31,889 por curiosidad 1000 00:44:31,889 --> 00:44:33,190 vamos a ver cuáles son 1001 00:44:33,190 --> 00:44:35,829 igual que aquí, los máximos y mínimos 1002 00:44:35,829 --> 00:44:37,530 números, esas variables famosas 1003 00:44:37,530 --> 00:44:54,809 por ejemplo 1004 00:44:54,809 --> 00:44:56,789 vamos a ver el máximo 1005 00:44:56,789 --> 00:44:57,909 y mínimo número double 1006 00:44:57,909 --> 00:45:00,289 y el máximo y mínimo número float 1007 00:45:00,289 --> 00:45:15,659 vale, vamos a mostrarlos 1008 00:45:15,659 --> 00:45:17,460 para ver que son números con una cantidad 1009 00:45:17,460 --> 00:45:18,920 de cifras decimales distinta 1010 00:45:18,920 --> 00:45:21,599 si lo ejecutamos 1011 00:45:21,599 --> 00:45:25,679 vale, pues primero 1012 00:45:25,679 --> 00:45:27,260 he puesto el double y luego el float 1013 00:45:27,260 --> 00:45:29,219 ¿verdad? tiene esto el dabel y luego el floa 1014 00:45:29,219 --> 00:45:30,579 entonces 1015 00:45:30,579 --> 00:45:39,739 este es el exponente 1016 00:45:39,739 --> 00:45:42,260 o sea, el máximo número dabel 1017 00:45:42,260 --> 00:45:44,579 es este, como veis 1018 00:45:44,579 --> 00:45:45,980 con muchas cifras decimales 1019 00:45:45,980 --> 00:45:48,739 por 10 elevado 1020 00:45:48,739 --> 00:45:49,800 a 308 1021 00:45:49,800 --> 00:45:56,750 o sea, es la anotación exponencial de toda la vida 1022 00:45:56,750 --> 00:45:58,610 como la gran mayoría venís 1023 00:45:58,610 --> 00:46:00,489 de bachillerato de ciencias, pues no son nada raros 1024 00:46:00,489 --> 00:46:01,909 o sea, este es un número 1025 00:46:01,909 --> 00:46:04,630 la leche, de grandote 1026 00:46:04,630 --> 00:46:05,869 ¿vale? es muy grandote 1027 00:46:05,869 --> 00:46:09,550 y como veis con una precisión decimal 1028 00:46:09,550 --> 00:46:11,630 bastante más grande que la precisión decimal 1029 00:46:11,630 --> 00:46:12,789 que me da el float 1030 00:46:12,789 --> 00:46:16,050 o sea cuando queráis precisiones decimales 1031 00:46:16,050 --> 00:46:17,690 de más de 1032 00:46:17,690 --> 00:46:19,909 4, 5, 6 cifras decimales 1033 00:46:19,909 --> 00:46:21,090 usar un double 1034 00:46:21,090 --> 00:46:23,969 cuando la precisión decimal nunca vais a pasar 1035 00:46:23,969 --> 00:46:24,710 de 2 o 3 1036 00:46:24,710 --> 00:46:27,750 cifras decimales podéis usar un float 1037 00:46:27,750 --> 00:46:28,510 tranquilamente 1038 00:46:28,510 --> 00:46:36,659 bueno, pues no tiene mayor 1039 00:46:36,659 --> 00:46:37,900 historia esto 1040 00:46:37,900 --> 00:46:40,519 vale, vamos a parar aquí un momentito