请查看以下代码:
#define IP_HL(ip) (((ip)->ip_vhl) & 0x0f)
#define IP_V(ip) (((ip)->ip_vhl) >> 4)
这里的完整代码http://www.tcpdump.org/pcap.html
我理解ip_vhl
中的8位:
IP_HL
做&使用0000 1111进行操作,这意味着我们得到最后四位IP_V
将位模式向右移位4位,同样也给我们最后4位...... 我检查了代码并且工作正常:它显示4个用于IP版本,5个用于标题大小...
它如何返回不同的数字? 我的理解有什么问题?
答案 0 :(得分:1)
不,IP_V
将位模式向右移位4位,这使得 first 4位(假设你正如你所知,它是8位值)。
更详细地说,假设位模式abcdefgh
:
abcd efgh abcd efgh
& 0000 1111 >> 4
========= =========
0000 efgh 0000 abcd
>> 4
操作会丢弃右侧出现的位,并在左侧输入0
位。因此,一次重视一点点的正确的东西会给出:
abcd efgh --> direction of shift
0abc defg
00ab cdef
000a bcde
0000 abcd
答案 1 :(得分:0)
如果你的位是0011 0101那么>>如果您将所有内容移动到正确的4个位置,并且丢失了0101位,则4将获得0000 0011。