2013-11-27 72 views
0

請看下面的代碼:這裏迷你拼圖IP報頭

#define IP_HL(ip)  (((ip)->ip_vhl) & 0x0f) 
#define IP_V(ip)  (((ip)->ip_vhl) >> 4) 

全碼http://www.tcpdump.org/pcap.html

我明白了8位的ip_vhl

  • IP_HL確實與0000 &操作1111,這意味着我們得到最後四位
  • IP_V右移四位,也給了我們最後四位...

我檢查了代碼,它工作正常:它顯示4爲IP版本和5爲標題大小...

它如何返回一個不同的數字? 我的理解有什麼問題?

回答

1

不,IP_V將位模式向右移位四位,這給我們第一個四位(假設,與您一樣,它是一個8位值)。

更詳細地,假定的位模式abcdefgh

abcd efgh   abcd efgh 
& 0000 1111    >> 4 
    =========   ========= 
    0000 efgh   0000 abcd 

>> 4操作扔掉離開在右手側比特和在左手側在0比特饋送。因此,右shifthing該值位在一個時間會給:

abcd efgh  --> direction of shift 
0abc defg 
00ab cdef 
000a bcde 
0000 abcd 
+0

對不起,不明白:)你能舉一個例子 – maximilliano

+0

謝謝,我會把你的答案當成你第一個 – maximilliano

+0

@maximilliano,不要接受答案,因爲它是_first,_so是一個精英統治,你應該接受它,因爲它是_best._你當然應該接受它:-) – paxdiablo

0

如果你的位爲0011 0101,然後>> 4將讓你0000 0011爲你感動的一切向右4位,和失去了0101比特。