tildes para libreria imprimir especiales devc dev caracteres biblioteca agregar acentos acento c++ c operators

c++ - para - El operador de tilde en C



imprimir caracteres especiales en c (6)

El caracter de tilde se usa como un operador para invertir todos los bits de un entero (NO a nivel de bit).

Por ejemplo: ~0x0044 = 0xFFBB .

He visto el operador de tilde utilizado en el algoritmo hash ELF, y tengo curiosidad por saber qué hace. (El código es de Eternally Confused ).

unsigned elf_hash ( void *key, int len ) { unsigned char *p = key; unsigned h = 0, g; int i; for ( i = 0; i < len; i++ ) { h = ( h << 4 ) + p[i]; g = h & 0xf0000000L; if ( g != 0 ) h ^= g >> 24; h &= ~g; } return h; }


El operador ~ es a nivel de bit NOT , invierte los bits en un número binario:

NOT 011100 = 100011


El operador Tilde (~) también llamado operador bit a bit NOT, realiza el complemento de cualquier número binario como argumento. Si el operando a NOT es un número decimal, entonces lo convierte como binario y realiza una operación de complemento.

Para calcular el complemento, simplemente invierta todo el dígito [0 -> 1] y [1 -> 0] Ej .: 0101 = 5; ~ (0101) = 1010. Uso del operador de tilde: 1. Se usa en la operación de enmascaramiento. Enmascarar significa configurar y restablecer los valores dentro de cualquier registro. por ejemplo:

char mask ; mask = 1 << 5 ;

Establecerá la máscara en un valor binario de 10000 y esta máscara se puede usar para verificar el valor de bit presente dentro de otra variable.

int a = 4; int k = a&mask ; if the 5th bit is 1 , then k=1 otherwise k=0.

Esto se llama Enmascaramiento de bits. 2. Para encontrar el equivalente binario de cualquier número usando propiedades de enmascaramiento.

#include<stdio.h> void equi_bits(unsigned char); int main() { unsigned char num = 10 ; printf("/nDecimal %d is same as binary ", num); equi_bits(num); return 0; } void equi_bits(unsigned char n) { int i ; unsigned char j , k ,mask ; for( i = 7 ; i >= 0 ; i--) { j=i; mask = 1 << j; k = n&mask ; // Masking k==0?printf("0"):printf("1"); } }

Salida: Decimal 10 es lo mismo que 00001010

Mi observación : para el rango máximo de cualquier tipo de datos, el complemento proporciona el valor negativo disminuido en 1 a cualquier valor correspondiente. ex:
~ 1 --------> -2
~ 2 ---------> -3
y así sucesivamente ... Te mostraré esta observación usando un pequeño fragmento de código

#include<stdio.h> int main() { int a , b; a=10; b=~a; // b-----> -11 printf("%d/n",a+~b+1);// equivalent to a-b return 0; } Output: 0

Nota: Esto es válido solo para el rango de tipo de datos. significa para el tipo de datos int esta regla será aplicable solo para el valor del rango [-2,147,483,648 a 2,147,483,647].
Gracias ... Que esto te ayude


Es el operador NOT bit a bit. Invierte todos los bits en un valor entero.


Este es el operador NOT bit a bit. Se voltea todos los bits en un número: 100110 -> 011001


~ es el operador NOT bit a bit. Invierte los bits del operando.

Por ejemplo, si tiene:

char b = 0xF0; /* Bits are 11110000 */ char c = ~b; /* Bits are 00001111 */