El operador ~ de bits, también llamado operador de complemento a uno, actúa sobre tipos enteros (char, int, shor, long) a nivel de bits. Lo que hace es cambiar 0 por 1 y viceversa. Por ejemplo, si se tiene el la constante int x = 47 en una representación binaria de 6 bits, 101111, la instrucción ~x da como resultado el número 010000. Hay que tener cuidado antes de apresurarnos a decir cual será el resultado aplicando éste operador en un programa en C. El punto importante aquí es que si nosotros imprimimos el valor actual de x, mediante una instrucción printf, obtendremos -48.
Sea el siguiente programa
Una ejecución con 47 como entrada es la siguiente:
Si las computadoras representaran los enteros con signo mediante el complemento a 1, el número al aplicar ~x sería -47, sin embargo, las computadoras almacenan los enteros con signo mediante la representación en complemento a dos. En ésta entrada hay más información al respecto.
La acción del operador complemento a uno |
/*+++++++++++++++++++++++++++++++++++++++++++++ * Este programa cambia un numero sin sigo a + * su complemento a uno a nivel de bits + * ++++++++++++++++++++++++++++++++++++++++++*/ #includeint main() { /* Abre main*/ unsigned contador; unsigned x; unsigned temporal; printf("\nIntroduzca un número: "); scanf("%d", &x); temporal = ~x; printf("\nEl complemento a uno de %d es: %d\n", x, temporal); printf("\nEl valor final de x: %d\n", x); return 0; } /* Cierra main*/
Una ejecución con 47 como entrada es la siguiente:
Introduzca un número: 47 El complemento a uno de 47 es: -48 El valor final de x: 47
Si las computadoras representaran los enteros con signo mediante el complemento a 1, el número al aplicar ~x sería -47, sin embargo, las computadoras almacenan los enteros con signo mediante la representación en complemento a dos. En ésta entrada hay más información al respecto.
No hay comentarios:
Publicar un comentario