|
|
Tweet |
| | Herramientas | Desplegado |
| ||||
| Os explico. Me estoy estudiando por mi cuenta el lenguaje C para el examen de una asignatura, pero hay una cosilla que no termino de comprender como funciona exactamente. A ver si me podéis ayudar. Se trata del operador de bits << y >>, es que realiza desplazamientos binarios. Entiendo el concepto, pero cuando lo veo aplicado en un programa me pierdo. Uno de los ejercicios que tengo, de los cuales tengo el resultado pero no el proceso, es éste: a=2<<2*3>>1; El resultado es 64. a=(2<<2)*(3>>1); el resultado es 8. La segunda línea la interpreto como que 2 en binario es 0010, y al desplazarse dos lugares se queda en 1000, es decir 8. Lo mismo con 3, que es 0011 y al desplazarse a la derecha un lugar queda 0001, es decir 1. Al multiplicar da 8*1=8. La primera línea es la que no entiendo. Si el operador * tiene mayor precedencia que el operador de bits, se supone que primero multiplico 2*3= 6, y luego? ¿desplazo 2 lugares a la izquierda y luego a la derecha? Entonces el resultado sería 1100 que es 14, no 64. A ver si me podéis ayudar o al menos dirigirme a páginas donde expliquen como se realiza el proceso de forma clara, porque todos lo explican con un ejemplo muy fácil, pero luego no sé como funciona de verdad. Gracias de antemano. |
| ||||
| ¿Puede ser una errata del libro?
__________________ ![]() Perdonen que les llame caballeros, pero es que no les conozco demasiado (G. Marx) Miembro nº1 de la plataforma En contra de los multinicks en el foro. |
| Estos usuarios dan las gracias a joseph_mary por su mensaje: | ||
| ||||
| Canal + es ahora Cuatro.
__________________ "Yo he visto cosas que vosotros no creeríais. Atacar naves en llamas más allá de Orión. He visto Rayos-C brillar en la oscuridad cerca de la Puerta de Tannhäuser. He visto pedir 50 millones por un piso a rehabilitar de 70 m2 en un quinto sin ascensor, en un edificio de 100 años del centro de Madrid. Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia. Es hora de morir." |
| ||||
| Ojo, la prioridad es una cosa y la precencia otra. Para este ejemplo, efectivamente la multiplicación tiene mayor prioridad que el desplazamiento de bits. Por tanto en un primer paso la operación queda a=2<<6>>1 Como la precedencia de estos operadores es de izquierda a derecha, se resuelven las operaciones de izq. a der. 2<<6 es 128. A continuación se resolvería 128>>1, lo que da 64. De todas formas, a menos que trabajes a bajo nivel me extraña que uses estas operaciones... mejor divide y multiplica, que queda más claro en el código. Saludos.
__________________ |
| Estos usuarios dan las gracias a Cygnus Saint por su mensaje: | ||
| ||||
| recuerde load""enter play,y si todo falla,usa un martillo
__________________ |
| Estos usuarios dan las gracias a midway por su mensaje: | ||
| ||||
| Ya te han comentado la solución De todas formas, sigue la regla de que si subes multiplicas x2, si bajas divides x2, no "cuentes los palotes" o te volverás tarumba. Una de las razones por las que servidor dejó de programar, siendo bastante bueno, modestia aparte ![]() Consejo: cuando acabes eso que estás haciendo, tira el libro, quema tus apuntes y olvida todo lo aprendido. Saldrás ganando.
__________________ Deeply, Govinda bowed; tears he knew nothing of, ran down his old face; like a fire burnt the feeling of the most intimate love, the humblest veneration in his heart. Deeply, he bowed, touching the ground, before him who was sitting motionlessly, whose smile reminded him of everything he had ever loved in his life, what had ever been valuable and holy to him in his life. El anciano propende a enjuiciar el hoy con el criterio del ayer. Ramón y Cajal |
| Estos usuarios dan las gracias a seacock por su mensaje: | ||
| ||||
| No, porque hay otros parecidos y tampoco me aclaro. Veo que ya me lo han explicado correctamente más abajo. Ojo, la prioridad es una cosa y la precencia otra. Para este ejemplo, efectivamente la multiplicación tiene mayor prioridad que el desplazamiento de bits. Por tanto en un primer paso la operación queda Gracias a los dos. La verdad es que ya me estaba volviendo loco. No es que trabaje a bajo nivel (ni lo pretendo) es una asignatura que tengo dentro de la carrera, y por estar trabajando no he podido ir a clase, con lo que me ha tocado estudiar a pelo y estos son ejercicios de examenes. Gracias de nuevo. |
| ||||
| jjajajaja, precisamente lo que pensaba hacer.Gracias. |
| ||||
| Si te parece complicado, cómprate un taladro y te pones a hacer de estas: No sabía que seguían metiendo caña con el C+, lo normal es que aprendiérais java o .net, no? |
| ||||
| Paso de pensarlo. Si la esperanza de vida se multiplica por 1000 y va a vivir 100.000 años jubilandote a los 99.965 años eso lo vas a usar entre 0 y ninguna vez. Los que dan clases y escriben libros tienen que ganarse la vida tambien y por eso lo tienes que aprender. |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Pido ayuda ideologica | lalo889 | Guardería | 18 | 11-nov-2008 10:16 |
| Pido ayuda a los compradores de ebay | Caperucita | Guardería | 23 | 29-ago-2008 17:08 |
| Delicada situación con esta chica, ayuda pido | Sota_de_espadas | Guardería | 105 | 16-jul-2008 21:31 |
| El listo del nazionalisto. Pido un poquito de ayuda. | glub | Guardería | 59 | 16-dic-2007 15:07 |
| Colegas Informaticos : Os Pido Ayuda | lennon | Guardería | 3 | 10-sep-2007 20:15 |