1 00:00:00,300 --> 00:00:27,300 Vale, la otra condición que habíamos dicho, que era Boolean condición 2, esta era la del aprobado, esta tenía una nota de examen y otra de recuperación, vale, y la condición 2, aquí estaba claro cuál era, 2 00:00:27,300 --> 00:00:29,859 Nota examen 3 00:00:29,859 --> 00:00:31,079 Mayor o igual 4 00:00:31,079 --> 00:00:34,280 Que 5 5 00:00:34,280 --> 00:00:39,979 O nota examen 6 00:00:39,979 --> 00:00:40,679 Más 7 00:00:40,679 --> 00:00:43,439 Nota recuperación 8 00:00:43,439 --> 00:00:46,280 Aquí sí que paréntesis obligatorios 9 00:00:46,280 --> 00:00:47,899 Lógicamente para hacer la división 10 00:00:47,899 --> 00:00:50,560 Entre 2 11 00:00:50,560 --> 00:00:52,759 Mayor o igual 12 00:00:52,759 --> 00:00:54,020 Que 5 13 00:00:54,020 --> 00:00:55,679 ¿Vale? 14 00:00:56,399 --> 00:00:58,060 Y esta sería nuestra condición 15 00:00:58,060 --> 00:00:59,840 La pongo aquí abajo para que se vea mejor 16 00:00:59,840 --> 00:01:05,359 nota examen, pues la que sea 17 00:01:05,359 --> 00:01:11,739 el aviso 18 00:01:11,739 --> 00:01:16,640 el aviso cual era 19 00:01:16,640 --> 00:01:21,120 el aviso era, tenías que presentarte 20 00:01:21,120 --> 00:01:21,879 al examen 21 00:01:21,879 --> 00:01:24,859 tu nota era menor que 5 22 00:01:24,859 --> 00:01:26,939 y habiendo tenido 23 00:01:26,939 --> 00:01:28,260 que presentar al examen 24 00:01:28,260 --> 00:01:31,359 resulta que tu nota de recuperación 25 00:01:31,359 --> 00:01:32,920 es igual a 26 00:01:32,920 --> 00:01:34,920 menos 1, este sería 27 00:01:34,920 --> 00:01:35,700 el aviso, verdad 28 00:01:35,700 --> 00:01:40,980 estás suspenso y además de estar 29 00:01:40,980 --> 00:01:42,700 suspenso, no te has presentado 30 00:01:42,700 --> 00:01:44,700 ¿Vale? 31 00:01:46,890 --> 00:01:48,629 Y la de los acompañantes 32 00:01:48,629 --> 00:01:51,250 Pues teníamos 33 00:01:51,250 --> 00:01:53,670 Aquí a dos personas 34 00:01:53,670 --> 00:01:58,760 Y la idea es 35 00:01:58,760 --> 00:02:00,120 Si pasan o no pasan 36 00:02:00,120 --> 00:02:08,120 Entonces 37 00:02:08,120 --> 00:02:13,719 Aquí con tres 38 00:02:13,719 --> 00:02:15,939 Pues efectivamente la podemos poner 39 00:02:15,939 --> 00:02:19,199 Para hacerlo 40 00:02:19,199 --> 00:02:20,379 Más sencillo 41 00:02:20,379 --> 00:02:22,639 Si la edad de una de ellas 42 00:02:22,639 --> 00:02:24,439 Es mayor o igual que 21 43 00:02:24,439 --> 00:02:25,580 Ya pasan las dos 44 00:02:25,580 --> 00:02:27,580 ¿Vale? Entonces 45 00:02:27,580 --> 00:02:33,419 si la edad de este es mayor o igual que 21 46 00:02:33,419 --> 00:02:35,759 las dos pasan, muy bien 47 00:02:35,759 --> 00:02:38,139 pero también pasan, luego or 48 00:02:38,139 --> 00:02:41,960 también pasan si la edad del segundo es mayor o igual que 21 49 00:02:41,960 --> 00:02:43,819 ahí también pasan 50 00:02:43,819 --> 00:02:46,199 pero también pasan 51 00:02:46,199 --> 00:02:51,580 si la edad del primero es mayor o igual que 18 52 00:02:51,580 --> 00:02:55,460 y voy a ponerlas aquí abajo 53 00:02:55,460 --> 00:02:57,599 esta y esta 54 00:02:57,599 --> 00:03:03,080 y si la edad del segundo 55 00:03:03,080 --> 00:03:04,680 es mayor o igual que 18 56 00:03:04,680 --> 00:03:09,020 mayor o igual que 18 57 00:03:09,020 --> 00:03:10,979 ¿vale? 58 00:03:12,560 --> 00:03:14,139 esta es la tercera condición 59 00:03:14,139 --> 00:03:26,740 aquí también los paréntesis 60 00:03:26,740 --> 00:03:27,900 están por claridad 61 00:03:27,900 --> 00:03:30,560 porque yo mentalmente he pensado en tres ideas 62 00:03:30,560 --> 00:03:32,460 la primera mayor de 21 63 00:03:32,460 --> 00:03:34,419 o la segunda mayor de 21 64 00:03:34,419 --> 00:03:35,860 o las dos mayores de edad 65 00:03:35,860 --> 00:03:38,819 entonces como hemos pensado en esas tres ideas 66 00:03:38,819 --> 00:03:40,639 pues esto lo hemos puesto 67 00:03:40,639 --> 00:03:42,180 entre paréntesis porque es 68 00:03:42,180 --> 00:03:44,379 la primera idea, la segunda y la tercera 69 00:03:44,379 --> 00:03:45,659 pero de nuevo 70 00:03:45,659 --> 00:03:48,659 si yo observo esta condición y veo como funciona 71 00:03:48,659 --> 00:03:50,780 podría quitar los paréntesis 72 00:03:50,780 --> 00:03:53,099 e independientemente 73 00:03:53,099 --> 00:03:54,060 de la prioridad c, funciona 74 00:03:54,060 --> 00:03:56,460 si es mayor o igual que 21 75 00:03:56,460 --> 00:03:58,639 resulta que no, pues está falso 76 00:03:58,639 --> 00:04:01,259 esta resulta que tampoco 77 00:04:01,259 --> 00:04:02,099 pues está falso 78 00:04:02,099 --> 00:04:04,159 ahora miraría esta 79 00:04:04,159 --> 00:04:05,659 esta es 19 80 00:04:05,659 --> 00:04:08,039 esta es true, vale 81 00:04:08,039 --> 00:04:10,659 pero como luego el total del estresor 82 00:04:10,659 --> 00:04:11,960 ya va en true 83 00:04:11,960 --> 00:04:14,259 porque esta es false, false 84 00:04:14,259 --> 00:04:16,139 or true, porque es 19 85 00:04:16,139 --> 00:04:18,519 pero dependemos ahora de este and 86 00:04:18,519 --> 00:04:19,240 porque es un and 87 00:04:19,240 --> 00:04:22,800 entonces si esta también es true 88 00:04:22,800 --> 00:04:24,899 porque es 19 o 20 89 00:04:24,899 --> 00:04:26,279 la total lo será 90 00:04:26,279 --> 00:04:27,959 en este ejemplo 91 00:04:27,959 --> 00:04:30,500 luego ya una vez que lo he observado 92 00:04:30,500 --> 00:04:32,379 puedo quitar los paréntesis y va a funcionar igual 93 00:04:32,379 --> 00:04:33,620 pero para qué 94 00:04:33,620 --> 00:04:36,959 Seguramente quien lo vea 95 00:04:36,959 --> 00:04:38,279 Lo va a ver más claro así 96 00:04:38,279 --> 00:04:41,199 Y me arriesgo a cometer menos errores 97 00:04:41,199 --> 00:04:43,279 Me arriesgo a que la condición no exprese 98 00:04:43,279 --> 00:04:43,980 Lo que yo quería 99 00:04:43,980 --> 00:04:46,399 Quitando paréntesis alegremente 100 00:04:46,399 --> 00:04:50,459 O sea, hacer los códigos cortos 101 00:04:50,459 --> 00:04:52,220 No significa que sean mejores 102 00:04:52,220 --> 00:04:53,500 Si a la máquina virtual le da igual 103 00:04:53,500 --> 00:04:54,540 Luego va a ejecutar lo mismo 104 00:04:54,540 --> 00:04:57,459 Hacer los códigos cortos 105 00:04:57,459 --> 00:04:59,920 Tiene el peligro de que son menos claros 106 00:04:59,920 --> 00:05:02,160 A la hora de leerlos y de entenderlos 107 00:05:02,160 --> 00:05:11,069 Bueno 108 00:05:11,069 --> 00:05:13,149 En el listado ese de ejercicios 109 00:05:13,149 --> 00:05:15,509 Luego al final hay condiciones 110 00:05:15,509 --> 00:05:17,410 Y todo eso para practicar 111 00:05:17,410 --> 00:05:21,069 Lo que pasa es que vamos a ver antes el operador ternario 112 00:05:21,069 --> 00:05:22,709 Para que esas aplicaciones 113 00:05:22,709 --> 00:05:24,889 Esos programitas se puedan hacer un poquito mejor 114 00:05:24,889 --> 00:05:30,470 ¿Qué operadores son estos? 115 00:05:31,230 --> 00:05:32,870 ¿Cuáles? Estos son los lógicos 116 00:05:32,870 --> 00:05:33,410 O booleanos 117 00:05:33,410 --> 00:05:36,009 Entonces si volvemos aquí 118 00:05:36,009 --> 00:05:37,810 Porque esto le vamos a dar ya 119 00:05:37,810 --> 00:05:40,490 dos patadas para mandarla a la porra 120 00:05:40,490 --> 00:05:41,930 porque nos estamos aburriendo mucho 121 00:05:41,930 --> 00:05:46,759 si volvemos a nuestra 122 00:05:46,759 --> 00:05:49,060 a nuestra lista de operadores 123 00:05:49,060 --> 00:05:51,980 aritméticos 124 00:05:51,980 --> 00:05:53,560 la asignación 125 00:05:53,560 --> 00:05:58,730 concatenación 126 00:05:58,730 --> 00:06:02,410 la precedencia de operadores 127 00:06:02,410 --> 00:06:04,290 que ante la duda 128 00:06:04,290 --> 00:06:05,550 paréntesis 129 00:06:05,550 --> 00:06:08,110 pero bueno la básica de multiplicación 130 00:06:08,110 --> 00:06:10,050 de divisiones antes que sumas esa la sabemos 131 00:06:10,050 --> 00:06:13,810 lo de promoción automática y casting 132 00:06:13,810 --> 00:06:16,170 también lo hemos hablado sobre ello 133 00:06:16,170 --> 00:06:17,910 estos de unarios 134 00:06:17,910 --> 00:06:21,970 los relacionales 135 00:06:21,970 --> 00:06:23,389 hemos hablado de ellos 136 00:06:23,389 --> 00:06:25,829 y estos son con los que 137 00:06:25,829 --> 00:06:27,529 estamos los booleanos o lógicos 138 00:06:27,529 --> 00:06:29,910 ¿vale? que hemos hablado 139 00:06:29,910 --> 00:06:31,910 de ellos con algún 140 00:06:31,910 --> 00:06:32,930 ejemplo y ya está 141 00:06:32,930 --> 00:06:34,550 y ahora 142 00:06:34,550 --> 00:06:37,730 aquí tenéis rollete 143 00:06:37,730 --> 00:06:39,790 que deberíais 144 00:06:39,790 --> 00:06:41,769 leeros, pero bueno, vuelve sobre lo mismo 145 00:06:41,769 --> 00:06:43,870 una y otra vez, y ahora ya nos viene 146 00:06:43,870 --> 00:06:45,870 este rollo, que lo vamos a mencionar 147 00:06:45,870 --> 00:06:47,930 pero, para que sepáis 148 00:06:47,930 --> 00:06:49,990 lo que es, pero ni lo vamos a practicar ni nada 149 00:06:49,990 --> 00:06:51,670 porque no merece la pena 150 00:06:51,670 --> 00:06:53,769 y es una cosa 151 00:06:53,769 --> 00:06:54,689 muy específica 152 00:06:54,689 --> 00:06:58,089 que son los operadores ya a nivel 153 00:06:58,089 --> 00:07:00,029 de bit, ¿quién usa operadores 154 00:07:00,029 --> 00:07:00,750 a nivel de bit? 155 00:07:01,610 --> 00:07:03,930 pues nadie, es una cosa muy específica 156 00:07:03,930 --> 00:07:06,189 vale, voy a mencionar solamente 157 00:07:06,189 --> 00:07:07,069 lo que es 158 00:07:07,069 --> 00:07:12,699 que son los que están aquí en esta 159 00:07:12,699 --> 00:07:15,079 tablita, en esta 160 00:07:15,079 --> 00:07:17,439 tablita, vamos a mencionar lo que es 161 00:07:17,439 --> 00:07:19,540 y os lo podéis leer 162 00:07:19,540 --> 00:07:21,500 y practicar 163 00:07:21,500 --> 00:07:23,240 si queréis, probarlo en Java 164 00:07:23,240 --> 00:07:25,319 lo practicáis y ya está, pero es que no lo vamos 165 00:07:25,319 --> 00:07:27,519 a usar jamás, así que 166 00:07:27,519 --> 00:07:28,839 nos vamos a quedar con eso 167 00:07:28,839 --> 00:07:31,339 entonces estos operadores de aquí 168 00:07:31,339 --> 00:07:38,100 vale 169 00:07:38,100 --> 00:07:40,439 se basan 170 00:07:40,439 --> 00:07:52,009 vale, estos operadores lo que consiguen 171 00:07:52,009 --> 00:07:54,350 es trabajar, si yo tengo 172 00:07:54,350 --> 00:07:56,389 una variable en memoria, que ya sabes 173 00:07:56,389 --> 00:07:58,350 que una variable en memoria es esto. 174 00:07:59,089 --> 00:08:00,449 Pero si unos hay puestos. 175 00:08:01,829 --> 00:08:02,910 ¿Cuántos en total? 176 00:08:03,529 --> 00:08:04,610 Depende del tipo 177 00:08:04,610 --> 00:08:06,389 de datos. Si es int, ya sabemos que 178 00:08:06,389 --> 00:08:08,430 es 32. Si es byte, sabemos 179 00:08:08,430 --> 00:08:09,069 que es 8. 180 00:08:11,149 --> 00:08:12,569 Bueno, pues esto es una variable. 181 00:08:13,170 --> 00:08:13,569 Nosotros 182 00:08:13,569 --> 00:08:16,129 trabajamos con la variable en su conjunto. 183 00:08:16,329 --> 00:08:18,550 Si es un entero, usamos la variable 184 00:08:18,550 --> 00:08:20,230 entera que representa 7 185 00:08:20,230 --> 00:08:21,870 para sumar la otra variable entera. 186 00:08:22,009 --> 00:08:25,170 que nos da 12 y todo ese 12 va a otra variable, 187 00:08:25,329 --> 00:08:30,009 trabajamos con el valor de esa variable en completo, ¿vale? 188 00:08:30,529 --> 00:08:32,809 No trabajamos a nivel de bit, 189 00:08:32,909 --> 00:08:35,470 porque es que esto tiene muy poco significado real. 190 00:08:35,649 --> 00:08:37,250 Cada bit suelte muy poco significado. 191 00:08:37,309 --> 00:08:41,330 Lo que tiene significado es que todo el conjunto, ¿vale? 192 00:08:41,610 --> 00:08:44,309 Es que todo el conjunto es un número, 193 00:08:45,009 --> 00:08:45,750 significa un número. 194 00:08:45,870 --> 00:08:48,210 Eso sí que tiene significado, ¿vale? 195 00:08:48,210 --> 00:08:51,090 ¿para qué puede 196 00:08:51,090 --> 00:08:52,669 servir trabajar a nivel de bits? 197 00:08:52,769 --> 00:08:54,690 pues cuando los bits los interpretamos como 198 00:08:54,690 --> 00:08:56,210 sensores tipo on off 199 00:08:56,210 --> 00:08:58,889 pues por ejemplo tengo una lista de 8 sensores 200 00:08:58,889 --> 00:09:00,389 y cada bit 201 00:09:00,389 --> 00:09:02,649 me controla un sensor si está 202 00:09:02,649 --> 00:09:04,710 activo o inactivo en función de si ese bit 203 00:09:04,710 --> 00:09:06,809 es 0 o es 1, para ese tipo de 204 00:09:06,809 --> 00:09:07,629 cosas extrañas 205 00:09:07,629 --> 00:09:10,429 pero en Java normalmente se hacen aplicaciones 206 00:09:10,429 --> 00:09:12,669 comerciales, no se hacen aplicaciones de control industrial 207 00:09:12,669 --> 00:09:13,610 ni de nada, pero bueno 208 00:09:13,610 --> 00:09:16,690 existen operadores que nos permiten 209 00:09:16,690 --> 00:09:18,470 trabajar con los bits por separado 210 00:09:18,470 --> 00:09:20,590 que son estos, vamos a mencionar un poco 211 00:09:20,590 --> 00:09:22,470 lo que hacen, pero sin practicarlo ni sin nada 212 00:09:22,470 --> 00:09:24,330 pero no merece la pena perder el tiempo con ello 213 00:09:24,330 --> 00:09:25,750 vale 214 00:09:25,750 --> 00:09:29,940 estos operadores, todos ellos, salvo 215 00:09:29,940 --> 00:09:30,559 este último 216 00:09:30,559 --> 00:09:33,879 lo que reciben a derecha y a izquierda 217 00:09:33,879 --> 00:09:36,080 son dos variables 218 00:09:36,080 --> 00:09:37,740 en el numerito en general 219 00:09:37,740 --> 00:09:40,080 dos variables normales, un int 220 00:09:40,080 --> 00:09:42,080 un long, un byte 221 00:09:42,080 --> 00:09:43,720 dos numeritos 222 00:09:43,720 --> 00:09:44,759 es lo que reciben 223 00:09:44,759 --> 00:09:47,820 incluso estas de aquí, porque 224 00:09:47,820 --> 00:09:52,720 Este and es el mismo símbolo que el and lógico, 225 00:09:53,340 --> 00:09:57,860 pero no hay confusión porque cuando aquí le damos condiciones 226 00:09:57,860 --> 00:10:00,539 nos referimos al and lógico de arriba. 227 00:10:00,840 --> 00:10:03,519 Pero cuando lo que le damos es numeritos, 228 00:10:04,019 --> 00:10:05,639 nos referimos a este que vamos a explicar. 229 00:10:05,940 --> 00:10:07,259 Cuando le damos un int o un long. 230 00:10:07,899 --> 00:10:11,600 Luego no hay confusión sobre cuando yo veo esto en un programa, 231 00:10:11,759 --> 00:10:12,679 ¿a qué me estoy refiriendo? 232 00:10:12,720 --> 00:10:15,860 ¿A este operador de bits que ahora explicamos cuál o al and de arriba? 233 00:10:15,860 --> 00:10:17,899 depende, si lo que hay aquí 234 00:10:17,899 --> 00:10:18,720 son condiciones 235 00:10:18,720 --> 00:10:21,879 boolean, si lo que hay aquí son boolean 236 00:10:21,879 --> 00:10:23,759 no hay ninguna duda, me refiero a land, a land de dos 237 00:10:23,759 --> 00:10:25,919 boolean, boolean este and boolean 238 00:10:25,919 --> 00:10:26,279 el otro 239 00:10:26,279 --> 00:10:29,659 pero si lo que tengo son dos variables enteras 240 00:10:29,659 --> 00:10:31,120 me refiero a este otro 241 00:10:31,120 --> 00:10:33,799 que ahora vemos lo que hay 242 00:10:33,799 --> 00:10:35,799 bueno, pues este 243 00:10:35,799 --> 00:10:37,860 de aquí, le damos dos variables 244 00:10:37,860 --> 00:10:38,679 a y b 245 00:10:38,679 --> 00:10:42,039 esta de aquí y esta de aquí 246 00:10:42,039 --> 00:10:43,399 y lo que hace es 247 00:10:43,399 --> 00:10:47,019 coge la primera y va moviendo los bits 248 00:10:47,019 --> 00:10:49,259 hacia la izquierda 249 00:10:49,259 --> 00:10:51,980 tantas posiciones como diga este número 250 00:10:51,980 --> 00:10:54,120 si este número B te dice 3 251 00:10:54,120 --> 00:10:56,139 pues coge la variable A 252 00:10:56,139 --> 00:10:58,039 y mueve hacia la izquierda 253 00:10:58,039 --> 00:10:59,779 3 posiciones 254 00:10:59,779 --> 00:11:02,980 luego 3 bytes desaparecerán 255 00:11:02,980 --> 00:11:04,340 se volatilizarán 256 00:11:04,340 --> 00:11:08,340 y por la izquierda entran 3 ceros 257 00:11:08,340 --> 00:11:10,919 es un desplazamiento de los bits 258 00:11:10,919 --> 00:11:14,299 por aquí entran los ceros 259 00:11:14,299 --> 00:11:16,500 el desplazamiento es hacia la izquierda 260 00:11:16,500 --> 00:11:16,879 entonces 261 00:11:16,879 --> 00:11:20,580 los más significativos se caen 262 00:11:20,580 --> 00:11:22,399 y por la zona menos 263 00:11:22,399 --> 00:11:23,820 significativa entran ceros 264 00:11:23,820 --> 00:11:26,259 ¿cuántos desplazamientos? tantos como el 265 00:11:26,259 --> 00:11:27,360 numerito B te indique 266 00:11:27,360 --> 00:11:30,340 ¿para qué te puede servir 267 00:11:30,340 --> 00:11:32,399 desplazar? bueno pues si tú efectivamente 268 00:11:32,399 --> 00:11:34,220 estás haciendo una rotación de 269 00:11:34,220 --> 00:11:35,320 sensores, lo que sea 270 00:11:35,320 --> 00:11:38,200 en realidad se corresponde 271 00:11:38,200 --> 00:11:40,120 a una multiplicación por dos 272 00:11:40,120 --> 00:11:42,779 desplazar en binario 273 00:11:42,779 --> 00:11:44,820 todo a la izquierda es multiplicar por 2 274 00:11:44,820 --> 00:11:46,840 desplazar 275 00:11:46,840 --> 00:11:48,639 dos veces a la izquierda es multiplicar por 4 276 00:11:48,639 --> 00:11:49,679 por 2 elevado a 2 277 00:11:49,679 --> 00:11:52,620 desplazar tres veces a la izquierda es multiplicar por 8 278 00:11:52,620 --> 00:11:53,440 por 2 elevado a 3 279 00:11:53,440 --> 00:11:55,500 del binario que habéis estudiado 280 00:11:55,500 --> 00:11:59,120 pues cada desplazamiento a la izquierda 281 00:11:59,120 --> 00:12:00,580 es una multiplicación por 2 282 00:12:00,580 --> 00:12:02,980 luego es una forma rápida de multiplicar por 2 283 00:12:02,980 --> 00:12:04,559 es decir, esto 284 00:12:04,559 --> 00:12:08,840 imaginaos que tenemos una variable 285 00:12:08,840 --> 00:12:09,940 pues eso 286 00:12:09,940 --> 00:12:12,639 una variable a 287 00:12:12,639 --> 00:12:14,700 que la multiplico por 2 288 00:12:14,700 --> 00:12:16,820 pues esta operación es la misma 289 00:12:16,820 --> 00:12:18,139 que esta 290 00:12:18,139 --> 00:12:23,340 lo de arriba y lo de abajo hace lo mismo 291 00:12:23,340 --> 00:12:25,120 me da igual multiplicar esta variable por 2 292 00:12:25,120 --> 00:12:27,740 que desplazar todos los bits a la izquierda a una posición 293 00:12:27,740 --> 00:12:32,570 esta es lo mismo 294 00:12:32,570 --> 00:12:34,690 pero desplazando a la derecha 295 00:12:34,690 --> 00:12:36,289 lo mismo 296 00:12:36,289 --> 00:12:38,750 desplazas a la derecha tantos bits 297 00:12:38,750 --> 00:12:39,549 como haya aquí 298 00:12:39,549 --> 00:12:42,769 en realidad se traduce a dividir entre 2 299 00:12:42,769 --> 00:12:44,789 ¿vale? 300 00:12:44,789 --> 00:12:49,450 Luego me da igual a entre 2 que desplazar a la derecha una cantidad. 301 00:12:50,610 --> 00:12:53,669 Normalmente dividimos y multiplicamos, no lo hacemos con desplazamientos. 302 00:13:01,059 --> 00:13:06,919 Este es, a ver, estos dos, los dos son desplazamientos a la derecha, 303 00:13:07,679 --> 00:13:10,419 pero uno propaga el bit de signo y otro no. 304 00:13:11,139 --> 00:13:15,940 Recordad que cuando un número es negativo, su bit más significativo es 1, ¿verdad? 305 00:13:15,940 --> 00:13:18,580 cuando es negativo, según el complemento a 2 306 00:13:18,580 --> 00:13:20,440 su bit más significativo es 1 307 00:13:20,440 --> 00:13:21,779 y cuando es positivo es 0 308 00:13:21,779 --> 00:13:24,139 pues el desplazamiento así 309 00:13:24,139 --> 00:13:25,820 con dos flechitas solo 310 00:13:25,820 --> 00:13:28,200 propaga el bit de signo, lo conserva 311 00:13:28,200 --> 00:13:30,399 entonces lo que entra por la izquierda son unos 312 00:13:30,399 --> 00:13:32,299 lo que entra son unos, lo propaga 313 00:13:32,299 --> 00:13:34,000 sin embargo 314 00:13:34,000 --> 00:13:35,559 este desplazamiento 315 00:13:35,559 --> 00:13:38,340 lo que mete por la izquierda son 316 00:13:38,340 --> 00:13:40,399 ceros, independientemente de que el bit 317 00:13:40,399 --> 00:13:42,360 de signo sea 1, es la única diferencia 318 00:13:42,360 --> 00:13:44,620 lo que yo meto por la izquierda 319 00:13:44,620 --> 00:13:45,700 en este desplazamiento 320 00:13:45,700 --> 00:13:48,519 en esto de aquí meto ceros 321 00:13:48,519 --> 00:13:50,120 y en este de aquí 322 00:13:50,120 --> 00:13:51,879 meto lo que tenga el bit de signo 323 00:13:51,879 --> 00:13:54,539 si el bit de signo tiene uno, pues propago el uno 324 00:13:54,539 --> 00:13:56,059 si no tiene 325 00:13:56,059 --> 00:13:58,019 si tiene cero, propago el cero 326 00:13:58,019 --> 00:13:59,600 es la única diferencia entre uno y otro 327 00:13:59,600 --> 00:14:03,799 y esto de aquí abajo 328 00:14:03,799 --> 00:14:07,720 este operador de aquí abajo 329 00:14:07,720 --> 00:14:13,049 ¿y los tres signos de mayor? 330 00:14:13,049 --> 00:14:13,970 ¿en qué se trabaja? 331 00:14:14,669 --> 00:14:17,269 en desplazar a la derecha tantas posiciones 332 00:14:17,269 --> 00:14:18,610 como hagas este de aquí 333 00:14:18,610 --> 00:14:21,169 y a la izquierda lo que metes es ceros 334 00:14:21,169 --> 00:14:22,330 ¿sí o sí? 335 00:14:23,029 --> 00:14:27,169 Aunque el número, es decir, si tú tienes... 336 00:14:27,169 --> 00:14:34,289 No, porque el de arriba, imagínate que en el de arriba el número A es el menos 7. 337 00:14:34,789 --> 00:14:38,909 Entonces, el menos 7, pues es el numerito que sea, yo que sé, algo así será. 338 00:14:40,190 --> 00:14:42,690 Bueno, este no sé cuál es este, menos 8, no lo sé. 339 00:14:44,190 --> 00:14:52,450 Y entonces, este es el A y vamos a desplazar el A a la izquierda dos posiciones, por ejemplo. 340 00:14:53,029 --> 00:15:01,269 Pues se mueven todos a la izquierda dos posiciones, pero lo que entra por los dos huecos libres es lo mismo que tenga el bid de signo. 341 00:15:01,789 --> 00:15:06,409 Como este tenía uno, porque el número negativo, entran unos, entran unos por aquí. 342 00:15:07,370 --> 00:15:13,889 Pero sin embargo, si el numerito A fuera, en vez del menos siete, fuera el siete, pues por ejemplo, yo que sé, fuera esto, 343 00:15:14,769 --> 00:15:18,629 al desplazar los dos se mueven todos los dos, pero lo que entra por aquí es cero. 344 00:15:18,629 --> 00:15:22,009 es decir, con esta opción de arriba 345 00:15:22,009 --> 00:15:24,549 lo que entra por la izquierda 346 00:15:24,549 --> 00:15:26,429 es 1 o es 0 347 00:15:26,429 --> 00:15:28,809 en función de cómo sea el bit de signo 348 00:15:28,809 --> 00:15:30,149 si es 1 entran 1 349 00:15:30,149 --> 00:15:30,830 si no entran 0 350 00:15:30,830 --> 00:15:34,350 eso es para conservar la división 351 00:15:34,350 --> 00:15:36,409 tal cual, porque si entran 1 352 00:15:36,409 --> 00:15:38,490 tú realmente estás haciendo la división 353 00:15:38,490 --> 00:15:40,529 y si tienes menos 8 354 00:15:40,529 --> 00:15:42,230 y desplazas entre 2 355 00:15:42,230 --> 00:15:44,649 se te queda el menos 4 356 00:15:44,649 --> 00:15:46,549 porque estás propagando con 1 357 00:15:46,549 --> 00:15:48,570 el 1 en negativo es como si fuera 0 358 00:15:48,570 --> 00:15:51,190 Entonces, esta versión 359 00:15:51,190 --> 00:15:53,690 Es la que es realmente la división 360 00:15:53,690 --> 00:15:55,409 Valiéndote tanto 361 00:15:55,409 --> 00:15:56,669 Sin número negativo como positivo 362 00:15:56,669 --> 00:15:59,149 Sí, la de arriba 363 00:15:59,149 --> 00:16:03,549 Claro, y esto es dividir en potencias de 2 364 00:16:03,549 --> 00:16:07,610 Y esto es desplazar 365 00:16:07,610 --> 00:16:09,570 Pero no se corresponde con una división 366 00:16:09,570 --> 00:16:10,710 Porque no conservas el signo 367 00:16:10,710 --> 00:16:14,070 Claro, esto es si los bits tienen otro sentido 368 00:16:14,070 --> 00:16:15,370 A lo mejor pues eso 369 00:16:15,370 --> 00:16:16,990 Cada bit tiene un significado distinto 370 00:16:16,990 --> 00:16:18,769 que se corresponde con un display 371 00:16:18,769 --> 00:16:20,509 y tú mueves todos los displays. 372 00:16:20,789 --> 00:16:22,429 No es una división de números. 373 00:16:25,200 --> 00:16:25,379 ¿Vale? 374 00:16:25,480 --> 00:16:27,159 En esta metes ceros 375 00:16:27,159 --> 00:16:28,860 independientemente de lo que tengan los bits. 376 00:16:28,980 --> 00:16:29,539 Metes ceros. 377 00:16:30,139 --> 00:16:30,500 ¿Vale? 378 00:16:31,440 --> 00:16:32,639 Y estas de aquí 379 00:16:32,639 --> 00:16:35,059 es hacer el and y el or 380 00:16:35,059 --> 00:16:36,679 pero de los bits, 381 00:16:36,820 --> 00:16:37,279 no del número. 382 00:16:43,509 --> 00:16:44,450 Esta de aquí, 383 00:16:45,049 --> 00:16:46,529 pues tú tienes aquí el a, 384 00:16:47,210 --> 00:16:48,570 que es este numerito, 385 00:16:48,710 --> 00:16:49,269 por ejemplo. 386 00:16:50,470 --> 00:16:51,649 Y tienes el b, 387 00:16:57,450 --> 00:16:58,309 por ejemplo, esto. 388 00:16:58,309 --> 00:17:01,590 pues el resultado es otro numerito 389 00:17:01,590 --> 00:17:04,869 y lo que se va haciendo es bit por bit 390 00:17:04,869 --> 00:17:07,609 como si fuera el and de cada bit 391 00:17:07,609 --> 00:17:10,170 asumiendo que el 1 es true y el 0 es false 392 00:17:10,170 --> 00:17:14,190 entonces esto a and b 393 00:17:14,190 --> 00:17:18,430 pues iríamos numerito por numerito 394 00:17:18,430 --> 00:17:19,809 0 and 0, 0 395 00:17:19,809 --> 00:17:21,589 1 y 1, 1 396 00:17:21,589 --> 00:17:23,329 0 y 1, 0 397 00:17:23,329 --> 00:17:24,309 es como multiplicar 398 00:17:24,309 --> 00:17:26,630 1 y 0, 0 399 00:17:26,630 --> 00:17:28,710 1 y 0, 0 otra vez 400 00:17:28,710 --> 00:17:29,950 1 y 0, 0 401 00:17:29,950 --> 00:17:32,009 0 y 1, 0 402 00:17:32,009 --> 00:17:33,309 y 0 y 1, 0 403 00:17:33,309 --> 00:17:36,029 es decir, se quedan todos a 0 404 00:17:36,029 --> 00:17:37,710 salvo en el que hubiera dos 1 405 00:17:37,710 --> 00:17:38,750 ese es el único 406 00:17:38,750 --> 00:17:42,109 salvo en el que hubiera dos 1, todo lo demás son 0 407 00:17:42,109 --> 00:17:45,769 pues eso es lo que hace esta operación 408 00:17:45,769 --> 00:17:46,710 entre dos números 409 00:17:46,710 --> 00:17:48,849 pues va bit por bit 410 00:17:48,849 --> 00:17:51,630 haciendo como si fuera la multiplicación 411 00:17:51,630 --> 00:17:58,160 por ejemplo, esta operación 412 00:17:58,160 --> 00:17:59,859 si la haces con 0, haces a 413 00:17:59,859 --> 00:18:00,500 and 0 414 00:18:00,500 --> 00:18:03,779 es como poner a cero todos los sensores 415 00:18:03,779 --> 00:18:05,579 porque la cera 416 00:18:05,579 --> 00:18:06,920 con el cero 417 00:18:06,920 --> 00:18:08,900 pones a cero todos, por ejemplo 418 00:18:08,900 --> 00:18:12,509 y esto 419 00:18:12,509 --> 00:18:16,289 es en lugar de hacer 420 00:18:16,289 --> 00:18:17,869 el and de bit por bit, el or 421 00:18:17,869 --> 00:18:19,369 en este caso 422 00:18:19,369 --> 00:18:27,829 en este caso el or sería 423 00:18:27,829 --> 00:18:29,789 cero and cero, cero 424 00:18:29,789 --> 00:18:32,289 uno y uno, uno, cero y uno, uno 425 00:18:32,289 --> 00:18:33,609 porque es el or 426 00:18:33,609 --> 00:18:35,609 uno y cero, uno, cero y uno, uno 427 00:18:35,609 --> 00:18:36,910 uno y cero, uno 428 00:18:36,910 --> 00:18:39,470 cero y uno, uno, cero y uno y uno 429 00:18:39,470 --> 00:18:41,609 ¿vale? entonces al hacer 430 00:18:41,609 --> 00:18:43,730 un or con uno, por ejemplo 431 00:18:43,730 --> 00:18:45,490 pues es como poner a uno todo 432 00:18:45,490 --> 00:18:47,569 este tipo 433 00:18:47,569 --> 00:18:49,410 de aplicaciones a bits, de bits 434 00:18:49,410 --> 00:18:51,730 más asociadas pues eso, a displays, a sensores 435 00:18:51,730 --> 00:18:53,450 a darle un significado a cada bit 436 00:18:53,450 --> 00:18:55,509 suelto, es para 437 00:18:55,509 --> 00:18:57,190 lo que tienen sentido estos 438 00:18:57,190 --> 00:18:59,650 operadores de aquí, de desplazar 439 00:18:59,650 --> 00:19:01,789 los bits, cambiarlos uno a uno 440 00:19:01,789 --> 00:19:03,769 pero en aplicaciones 441 00:19:03,769 --> 00:19:05,670 reales, pues bueno, son cosas 442 00:19:05,670 --> 00:19:07,690 muy específicas, por eso no vamos a hacer ejemplos 443 00:19:07,690 --> 00:19:09,890 si es que no lo vamos a utilizar en todo el curso 444 00:19:09,890 --> 00:19:11,750 pero bueno, hay que 445 00:19:11,750 --> 00:19:13,890 mencionarlo para que no parezca que os ocultamos 446 00:19:13,890 --> 00:19:14,329 información 447 00:19:14,329 --> 00:19:17,910 y este sería el 448 00:19:17,910 --> 00:19:18,230 OR 449 00:19:18,230 --> 00:19:22,099 el OR exclusivo 450 00:19:22,099 --> 00:19:25,299 el OR exclusivo pues es 451 00:19:25,299 --> 00:19:27,039 tienen que ser distintos 452 00:19:27,039 --> 00:19:28,960 para que sea uno, el OR exclusivo 453 00:19:28,960 --> 00:19:30,819 tienen que ser distintos para que sea uno 454 00:19:30,819 --> 00:19:33,000 claro, por ejemplo 455 00:19:33,000 --> 00:19:34,940 uno y uno, que aquí no hay ninguna combinación 456 00:19:34,940 --> 00:19:36,180 uno y uno sería cero 457 00:19:36,180 --> 00:19:38,599 sin embargo con el anormal 458 00:19:38,599 --> 00:19:39,480 1 y 1 es 1 459 00:19:39,480 --> 00:19:41,900 pues con el or exclusivo 460 00:19:41,900 --> 00:19:47,970 0 y 0 y 1 y 1 461 00:19:47,970 --> 00:19:49,049 son 0 462 00:19:49,049 --> 00:19:51,549 solo son 1, 0 y 1, 1 y 0 463 00:19:51,549 --> 00:19:57,339 y este que es un operador 464 00:19:57,339 --> 00:19:59,619 que se pone delante de la variable que sea 465 00:19:59,619 --> 00:20:01,480 lo único que hace es 466 00:20:01,480 --> 00:20:02,819 invertir los bits 467 00:20:02,819 --> 00:20:04,980 va bit por bit y los invierte 468 00:20:04,980 --> 00:20:07,900 si yo hago esto de a 469 00:20:07,900 --> 00:20:09,660 me invierte los bits 470 00:20:09,660 --> 00:20:11,220 El que esté a cero le pone a uno 471 00:20:11,220 --> 00:20:12,940 Y el que esté a uno le pone a cero 472 00:20:12,940 --> 00:20:23,500 Bueno, pues son operaciones a nivel de bits 473 00:20:23,500 --> 00:20:24,680 Muy específicas 474 00:20:24,680 --> 00:20:27,480 Y que salvo para hacer alguna multiplicación 475 00:20:27,480 --> 00:20:28,380 O alguna cosa 476 00:20:28,380 --> 00:20:30,779 Realmente no tiene mucho 477 00:20:30,779 --> 00:20:32,799 Mucha utilidad 478 00:20:32,799 --> 00:20:34,259 ¿Y para qué te sirve esto? 479 00:20:34,920 --> 00:20:35,859 ¿En el mundo real? 480 00:20:36,859 --> 00:20:38,339 ¿Para programar en máquina? 481 00:20:39,039 --> 00:20:39,900 Yo no lo uso 482 00:20:39,900 --> 00:20:41,500 No, con mi examinador no 483 00:20:41,500 --> 00:20:44,720 No lo he usado en mi vida 484 00:20:44,720 --> 00:20:45,380 No lo sé 485 00:20:45,380 --> 00:21:14,880 Pero, pues, si tú tienes una, imagínate que tuvieras unos requisitos de memoria, de rendimiento de memoria muy grandes, o sea, una aplicación que exige una fiabilidad extrema, entonces, en ese caso, tiene sentido que aproveches los bits al límite y que le des un significado y que, por ejemplo, si a ti hay un dato que lo único que te importa es si es true o false o si pasa o no pasa, 486 00:21:15,380 --> 00:21:18,980 pues, ¿para qué usar 8 variables boolean? 487 00:21:19,460 --> 00:21:22,579 Puedes usar un byte y que cada uno de esos bits, 488 00:21:23,019 --> 00:21:25,579 en función de si es 0 y 1, te indique si eso pasa o no. 489 00:21:26,099 --> 00:21:28,000 Entonces, optimizas el uso de la memoria 490 00:21:28,000 --> 00:21:30,859 en aplicaciones en las que tengan unos requisitos, 491 00:21:30,940 --> 00:21:32,779 a lo mejor, de rendimientos muy específicos. 492 00:21:33,299 --> 00:21:35,500 Lo que te permite esto es aprovechar la información. 493 00:21:35,640 --> 00:21:37,200 No te estamos malgastando información todo el rato. 494 00:21:37,299 --> 00:21:40,299 Uno declara un int, ¿y qué números ponen int? 495 00:21:40,299 --> 00:21:42,259 La mayoría de los bits te están sobrando. 496 00:21:42,259 --> 00:21:45,359 Cuando tú declaras una condición 497 00:21:45,359 --> 00:21:46,359 Con una variable boolean 498 00:21:46,359 --> 00:21:48,359 Boolean ocupa en memoria 499 00:21:48,359 --> 00:21:50,160 No sé si 8 o 16 bits 500 00:21:50,160 --> 00:21:53,099 Pero es que solamente tiene dos posibilidades 501 00:21:53,099 --> 00:21:53,920 O true o false 502 00:21:53,920 --> 00:21:55,839 Pues usar tantos bits para eso 503 00:21:55,839 --> 00:21:57,359 Cuando un solo bit te valdría 504 00:21:57,359 --> 00:21:59,480 Pues para aplicaciones en las cuales 505 00:21:59,480 --> 00:22:00,839 El rendimiento sea muy grande 506 00:22:00,839 --> 00:22:01,500 Pero vamos 507 00:22:01,500 --> 00:22:05,400 Son situaciones muy específicas 508 00:22:05,400 --> 00:22:08,619 Y si seguimos con 509 00:22:08,619 --> 00:22:10,000 Operadores de bits 510 00:22:10,000 --> 00:22:11,859 Pues bueno, aquí tenéis un rollete 511 00:22:11,859 --> 00:22:14,920 que lo especifica 512 00:22:14,920 --> 00:22:23,849 y aquí la tabla 513 00:22:23,849 --> 00:22:25,369 de precedencia de operadores 514 00:22:25,369 --> 00:22:27,849 pero normalmente uno conoce 515 00:22:27,849 --> 00:22:28,809 siempre lo básico 516 00:22:28,809 --> 00:22:32,369 que es que estos van por delante 517 00:22:32,369 --> 00:22:33,289 del más y el menos 518 00:22:33,289 --> 00:22:36,529 y efectivamente 519 00:22:36,529 --> 00:22:37,970 aquí ya lo tenemos resuelto 520 00:22:37,970 --> 00:22:38,970 que yo no lo recordaba 521 00:22:38,970 --> 00:22:41,109 por eso lo quería probar 522 00:22:41,109 --> 00:22:44,190 el AND siempre se ejecuta 523 00:22:44,190 --> 00:22:44,910 antes del OR 524 00:22:44,910 --> 00:22:46,630 entonces si no ponéis paréntesis 525 00:22:46,630 --> 00:22:48,150 los and 526 00:22:48,150 --> 00:22:50,029 se van a hacer antes que los or 527 00:22:50,029 --> 00:22:50,690 siempre 528 00:22:50,690 --> 00:22:54,589 entonces esto es más confuso que las sumas y restas 529 00:22:54,589 --> 00:22:56,369 nos es más confuso las operaciones 530 00:22:56,369 --> 00:22:57,769 lógicas que las aritméticas 531 00:22:57,769 --> 00:22:59,230 entonces 532 00:22:59,230 --> 00:23:02,509 no tengáis miedo de abusar de los paréntesis 533 00:23:02,509 --> 00:23:04,190 en expresiones lógicas 534 00:23:04,190 --> 00:23:06,369 lo peor que puede ocurrir 535 00:23:06,369 --> 00:23:07,130 es que sobren 536 00:23:07,130 --> 00:23:09,650 pero si faltan es grave 537 00:23:09,650 --> 00:23:14,000 y ahora ya 538 00:23:14,000 --> 00:23:16,299 esta hojita que es 539 00:23:16,299 --> 00:23:17,680 un poco el recordatorio 540 00:23:17,680 --> 00:23:20,500 el repaso de los operadores que vamos a manejar 541 00:23:20,500 --> 00:23:24,119 la olvidamos porque ya sabemos 542 00:23:24,119 --> 00:23:26,200 con algunos ejemplos además 543 00:23:26,200 --> 00:23:28,000 los operadores que vamos a manejar 544 00:23:28,000 --> 00:23:29,660 salvo ya este 545 00:23:29,660 --> 00:23:33,660 que es el famoso operador ternario 546 00:23:33,660 --> 00:23:36,579 al que hace referencia 547 00:23:36,579 --> 00:23:43,470 estos ejercicios de aquí 548 00:23:43,470 --> 00:23:45,769 que estáis haciendo para practicar 549 00:23:45,769 --> 00:23:48,930 pues estos de aquí hacen referencia ya 550 00:23:48,930 --> 00:23:50,829 a este operador ternario, ¿vale? 551 00:23:51,009 --> 00:23:53,230 Entonces una vez visto eso, pues ya 552 00:23:53,230 --> 00:23:54,670 podéis hacer todo esto 553 00:23:54,670 --> 00:23:56,369 todos los que hay aquí 554 00:23:56,369 --> 00:23:59,250 para poner un poquito en práctica esta primera parte 555 00:23:59,250 --> 00:24:01,710 de variables, operadores, asignaciones 556 00:24:01,710 --> 00:24:06,740 pues venga 557 00:24:06,740 --> 00:24:09,079 vamos a mencionar esto del operador ternario 558 00:24:09,079 --> 00:24:09,700 y 559 00:24:09,700 --> 00:24:12,900 bueno, vamos a pasar 560 00:24:12,900 --> 00:24:15,220 lista y así descansamos unos minutitos