c - 位运算剖析

标签 c bit-manipulation

我需要根据 IP 地址和端口号计算的哈希值。我找到了以下示例,并且通过跟踪,我可以看到它返回了一个我认为没问题的三位数哈希值。 但是,我想更详细地了解会发生什么,但我很难搞清楚。

代码片段如下:

((addr.s_addr ^ (addr.s_addr>>8)^ntohs(port) & 255);

addr.s_addr 是一个无符号长整数(32 位)。 端口是无符号短(16 位)。

IP 地址值 192.168.50.70 和端口号 60049 返回哈希值 249(当用 %d 打印时)。

任何人都可以帮助我了解该操作的实际作用吗? :)

谢谢。

亲切的问候 安德烈亚斯

最佳答案

这不是什么大谜:它异或 (^) adds.s_addr 本身向右移动了 8 个空格;然后将它与端口号进行异或运算,最后将整个内容与 255 进行与运算以将其长度限制为 8 个字节。

关于c - 位运算剖析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429660/

相关文章:

c - GTK : wait for user input

c - 用户空间中的线程和产量

java - Java中非常紧凑的位数组

C程序列出文件

使用 FFmpeg 库的 C 代码 - 编译错误

mysql - SQL 查询中大无符号整数(>1024 位)的按位运算符

PHP按位左移32个空格问题和大量算术运算的不良结果

在 C 编程中改变一点

c++ - 避免在bzhi(y,tzcnt(x))中使用不必要的mov ecx,ecx指令

c++ - 具有不同返回类型的函数指针