C 迷你拼图IP报头
请看以下代码:C 迷你拼图IP报头,c,ip,c-preprocessor,C,Ip,C Preprocessor,请看以下代码: #define IP_HL(ip) (((ip)->ip_vhl) & 0x0f) #define IP_V(ip) (((ip)->ip_vhl) >> 4) 完整代码在这里 我知道在ip_vhl中的8位中: IP_HL使用0000 1111进行操作(&O),这意味着我们得到最后四位 IP_V将位模式向右移动四位,ehich也会给我们最后四位 我检查了代码,它工作正常:IP版本显示4,头大小显示5 它如何返回不同的
#define IP_HL(ip) (((ip)->ip_vhl) & 0x0f)
#define IP_V(ip) (((ip)->ip_vhl) >> 4)
完整代码在这里
我知道在ip_vhl
中的8位中:
使用0000 1111进行操作(&O),这意味着我们得到最后四位IP_HL
将位模式向右移动四位,ehich也会给我们最后四位IP_V
我的理解有什么问题?没有,
IP\u V
将一个位模式向右移动四位,这给了我们前四位(假设它是一个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
如果您的位是0011 0101,则>>4将为您提供0000 0011,因为您已将所有内容移动到正确的4个位置,并丢失了0101位。对不起,不明白:)您能举个例子吗谢谢,我将按照您的回答回答first@maximilliano,不要接受答案,因为这是第一个答案,精英管理也是第一个答案,你应该接受它,因为它是最好的。当然,你还是应该接受它:-)