程式設計中的 魔數 (magic number)是什麼意思?平時我們能接觸到哪些魔數?

時間 2021-05-07 13:43:40

1樓:rileyye

所有人都能接觸到的是VS Debug版本中的屯、燙、葺。

分別是 0xCDCDCDCD ,0xCCCCCCCC 和 0xDDDDDDDD。

2樓:

簡單講就是沒有依據沒有說明突然出現在程式裡作為入參或者變數的數字,除了寫這玩意兒的人,沒人能通過上下文知道這個數放在這兒是為什麼(可能他自己也不知道)。解決辦法也很簡單,用的所有數字常量全部事先用有意義的變數宣告,提高可讀性。

3樓:黎曉

魔數簡單來說指的就是那些沒有實際意義的數

常見的magic number如linux中各種檔案的識別符號;還有比如節的mbr最後兩位元組的0x55,0xaa

4樓:

魔數是自定義的特定常數值,為啥定義成這個特定值一般原因成謎。

比如某個網路協議資料幀以0x65作起始標誌,只要對資料中所有0x65進行轉義可以保證分包和粘包時接收端還能從緩衝區裡正確取出資料幀,那麼這個0x65怎麼來的,顯然是制定協議的人任取的,協議制定者也許有他的理由,但一般協議不會把這個原因給出,只作為規定寫在協議中,對於後來者這是個謎。

再比如 Unicode編碼中推薦使用0xfffe開頭的字串或文字檔案,這是為了在不確定編碼型別時能與其他編碼的字串區分開,這兩位元組當然不能任取,因為大多數值已經有定義,所以必須取所有編碼中都未定義過的雙位元組,但還是應該有多個可取的值,為什麼取0xfffe也是個謎(當然這個謎也許有謎底,0xffff已經用掉,從大到小正好輪到0xfffe)

還有一種是程式設計師定義了一些常數,但這些常數的意義沒有注釋,也無法從上下文看出端倪,同樣是謎。

5樓:老徐程式設計

C++的hash_map中有這麼乙個數,用於計算資料的雜湊值。這是乙個16進製制數,卻又剛好是乙個英文單詞,不知標準庫開發者是出於惡搞還是什麼原因用了這個值,總之我覺得很magic。

6樓:Hawaii

用於生成偽隨機數的線性同餘演算法

X(n+1) = (ax(n) + c ) % m其中a和m的選取很大程度上影響了生成的偽隨機序列的質量。glibc使用的是這樣兩個魔法數字:

a = 1103515245

m = 2^32

m的值很好理解,為了使結果能覆蓋整個int範圍。但a的值就十分神奇了。這背後應該有著深奧的數論知識,然而我並不能理解

7樓:吃芒果的公尺老鼠

nachos4.1中,noff.h裡巨集定義了乙個magic number:

#define NOFFMAGIC 0xbadfad//magic number denoting nachos object code file

多執行緒網路程式設計中如何合理地選擇執行緒數?

jameswhale 若業務是CPU計算型,建立比CPU核多的執行緒的確是沒有意義的,徒增執行緒的切換開銷。若業務是IO密集型的,可以建立比CPU核數多一些的執行緒,實際經驗是一般設定為2倍。 戈君 需要的執行緒數 qps latency 單位秒 依據是little s law,類似的應用是tcp中...

無理數中的後面的數是前面的數決定的嗎?

甘文迪許 後面的數和前面的數難以找到明顯的關係,這一點其他回答者已經說得比較清楚了。如由 kolakoski 數列構成的無理數0.12211212212211 它是有規律的,因為 kolakoski數列的定義就是有規律的。kolakoski 數列的介紹 塵月 答案當然是 決定的啦 其實你注意一點 是...

關於ACM中的程式設計演算法問題 ?

int rampNum int a,int n int s 0 a 0 0 for int i 1 i n i for int j a i 1 j bhuztez的思路,寫出了c 版本的,這裡假設陣列中下標為1的元素為最高位以方便處理,combinationNum為計算組合數的函式。 inspire...