按位操作解剖

时间:2011-12-08 10:40:53

标签: 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打印时)。

任何人都可以帮我理解操作实际上做了什么吗? :)

谢谢。

亲切的问候 安德烈亚斯

1 个答案:

答案 0 :(得分:0)

这并不是什么大问题:XORs(^)adds.s_addr本身向右移动了8个空格;然后使用端口号对它进行xors,最后将整个事物与255进行AND运算,将其限制为8个字节。