C/Visual C - Una cosa rara: &~

 
Vista:

Una cosa rara: &~

Publicado por PUN (3 intervenciones) el 05/09/2005 02:16:18
Hola

Tengo una cosa rara como ésta:

A = (B + 3) &~ 3;


Lo poco que sé es que el símbolo "&" convierte los bits usando "AND", y que "~" convierte los bits usando "NOT". Pero no sé si está bien escrita esa parte, ni tampoco sé qué clase de resultado podría dar.

Por ejemplo, si "B" fuera 3, entonces "A" = (3 + 3) AND NOT 3 ???
No me parece que tenga sentido.

¿Entonces cómo funciona esto?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Una cosa rara: &~

Publicado por chuidiang (677 intervenciones) el 05/09/2005 09:50:11
Hola:

El ~3 efectivamente es NOT 3. El 3 en binario es 00...0011, el NOT 3 es 11...1100

Al hacer la suma y poner AND NOT 3, lo que estás haciendo es eliminar los dos ultimos bits del resultado.

¿Para qué sirve esto?. No sé cual es la intención del código, pero estas cosas suelen hacerse para hacer más rápido otras cosas. En tu caso concreto, imagina que haces la suma B+3 y quieres coger el valor por debajo más cercano que sea multiplo de 4. Por ejemplo

12+3=15. Quiero coger el 12, que es multiplo de 4 por debajo.

Una forma de hacerlo que se nos ocurre a cualquiera es con una cuenta.

12+3=15;
15 / 4 = 3; // division entera, sin decimales.
valor = 3 * 4 = 12; // se multiplica el resultado de la division entera por 4

y una forma más eficiente de hacerlo es la que tú tienes

12 + 3 = 15, en binario 00..001111
15 AND NOT 3 = 00..001111 AND 11..1100 = 00..001100 = 12

En fin, son pequeños trucos que conoce la gente a la que le gustan los bits y el ensamblador.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias

Publicado por PUN (1 intervención) el 05/09/2005 19:38:09
Te agradezco por la respuesta. ¡Tu descripción es espectacular!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar