OSPF LSA Sequence Number(From 0x80000001 to 0x7FFFFFFF ?)

很多人在讀到BSCI OSPF LSA Sequence Number這個章節時,常常會在心中出現一個問號? Cisco的教材是不是又打錯字了(Cisco教材編輯校閱相關負責單位請好好反省…真的是錯字百出),其實是沒錯的。OSPF LSA Sequence Number的起始值是0x80000001,結束值是0x7FFFFFFF,或許你可能會感到困惑,怎麼會一開始的數字比結束的數字還要大呢?

事實上,這是因為起始值中開頭的8是代表著負數,它的意思是-7FFFFFFF,請參考以下的說明,就會明白了:

在古早時期玩遊戲是一種電腦能力的自我修練與提昇,怎麼說呢? 如果十幾年前很喜歡玩電腦遊戲的朋友,一定曾經使用過種種遊戲修改工具,像是PCTOOLS、整人專家等,透過這些工具的輔助將遊戲中的夢想變為現實,只要是各種可能的數字上限與主角能力的極限都可以任意調整。

廢話不多說,來看看我們要談的東西。一個位元組(byte)資料可表示的範圍從0(0000 0000)到255(1111 1111),那麼負數的話要怎麼表示呢? 在電腦系統中只有0與1,並沒有任何的額外符號可以用來表示所謂的正/負數,因此可以使用一種變通的方式,我們利用位元組中最左邊的數字來代表正或負,以0為正,以1為負。

比如說0111 1111轉換為十進位的話是127,1111 1111轉換為十進位的話則是-127,由此我們知道一個位元組的表示範圍可以從-127到127。

以上我們談的都是所謂的原碼表示法,但是在電腦中的資料都是以補數來存放的,只有這樣才能減輕CPU的負擔。提到了補數,我們就不得不提一下倒數了。在電腦中是這樣規定倒數的:如果是正數,則按照原碼表示法的表示方式維持不變,如127仍為0111 1111;而如果為負數,那麼第一個數字為1,其他數字則倒反過來(也就是0變1,1變0),比如說二進位表示法-127(1111 1111),倒數的表示法為1000 0000。

補數也是相同道理,如果是正數,則依照原碼表示法不變,如127仍為0111 1111;如果為負數,則是除了第一個數字為1之外,其他數字先取倒數再加1,如-127,先取倒數為1000 0000,然後再加1,則為1000 0001。但1000 0000比較特殊,我們可以用它來表示-128,由此可以補數可表示的範圍為-128到127。

◎參考資料:原码、反码和补码(http://blog.csdn.net/ncdawen/archive/2006/06/28/846672.aspx)

Comments

Popular posts from this blog

L2TPv3 Enables Layer 2 Services for IP Networks

TCP/IP 明確擁塞通知 (ECN)

Q-in-Q(Dot1Q Tunnel) Sample Configuration