1. ホーム
  2. c++

[解決済み] C のチルダ演算子

2022-11-08 20:31:57

質問

ELFのハッシュアルゴリズムでチルダ演算子が使われているのを見たことがありますが、これが何をするものなのか興味があります。(コードは から、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;
}

どのように解決するのですか?

この ~ 演算子はビット単位で NOT 演算子で、2進数のビットを反転させます。

NOT 011100
  = 100011