89 votes

L'opérateur tilde en C

J'ai vu l'opérateur tilde utilisé dans l'algorithme de hachage ELF, et je suis curieux de savoir ce qu'il fait. (Le code est 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;
}

117voto

GWW Points 20316

El ~ L'opérateur est de type bitwise PAS il inverse les bits d'un nombre binaire :

NOT 011100
  = 100011

41voto

dlev Points 28160

~ est l'opérateur NOT par bit. Il inverse les bits de l'opérande.

Par exemple, si vous avez :

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

11voto

immortal Points 1276

Il s'agit de l'opérateur NON par bit. Il renverse tous les bits d'un nombre : 100110 -> 011001

7voto

Sander De Dycker Points 6074

C'est l'opérateur NON par bit. Il inverse tous les bits d'une valeur entière.

7voto

Cedekasme Points 667

Le caractère tilde est utilisé comme opérateur pour inverser tous les bits d'un nombre entier (NOT bitwise).

Par exemple : ~0x0044 = 0xFFBB .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X