我见过ELF哈希算法中使用的tilde运算符,我很好奇它的作用.(代码是from 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,它将二进制数中的位反转:

NOT 011100
  = 100011

C++相关问答推荐

传递给空闲的无效地址0x71 db7 cb5e0:未分配值

单指针和空参数列表之间的函数指针兼容性

SDL 2.0-从数组渲染纹理

ARM64 ASIMD固有的加载uint8_t* 到uint16x8(x3)?

当输入负数时,排序算法存在问题

将宏值传递给ARM链接器,该链接器将变量放置在特定位置

是否可以使用指针算法在不对齐的情况下在 struct 中相同类型的字段的连续序列之间移动?

错误:包含文件时类型名称未知

==284==错误:AddressSaniizer:堆栈缓冲区下溢

C语言中浮点数的取整方式浮点数尾数超过23位时如何取整剩余部分

Fprintf正在写入多个 struct 成员,并且数据过剩

正在try 理解C++中的`正在释放的指针未被分配‘错误

如何在MSVC中使用intSafe.h函数?

C语言中的指针和多维数组

将不同类型的指针传递给函数(C)

在C中交换字符串和数组的通用交换函数

与指针的原始C数组或C++向量<;向量<;双>>;

为什么<到达*时不会转换为>?

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据

获取 struct 中匿名 struct 的大小