2012-04-25 46 views
3

我碰到的代碼行其中有這樣的事情下面#define中使用0x1的含義是什麼?

#define IM 0x1 

我知道什麼IM代表,但我知道0x1代表什麼,以及它的使用及其使用的意義是什麼我intrested在定義語句中。

我是C的新手,我沒有搜索這個特定的項目,但找不到它。預先感謝您的幫助。

+0

可能作者使用0x1來遵守其他變量的隱式標準,如Sasquiha所舉例說明的。 – Spidey 2012-04-25 13:46:09

回答

6

它是十六進制數1,做二進制標誌時,通常這樣定義。所以你應該有

0x1 
0x2 
0x4 
0x8 
0x10 

所以你可以看到你正在設置的位。

+1

我會爲1 << n,它更清晰和不變,編譯器會優化。 – Spidey 2012-04-25 13:46:45

+2

@Spidey我不相信普通的十六進制,就像在這種情況下掩蓋位的目的,目前還不清楚。如果讀取代碼的人不理解十六進制,他們最好離開計算機,然後將代碼交給程序員。 – Lundin 2012-04-25 14:59:22

9

它只是一個以十六進制定義的數字(基數爲16)。這可能用於避免代碼中的幻數。魔術數字是程序員在代碼中直接使用數字而沒有解釋。例如

int x = 32; 
x -= 8; 

此代碼一起做幾乎沒有任何意義,但如果我這樣做

#define TOTAL_BITS 32 
#define BITS_PER_BYTE 8 

int x = TOTAL_BITS; 
x -= BITS_PER_BYTE; 

的代碼是顯著更清晰。無論如何,宏(即#define)直接將它們的內容替換爲它們在代碼中顯示的位置。所以如果你打算使用表達式或類似的東西,最好用parens包圍它。

3
#define IM 0x1 

這是一個其他位置標記系統:十六進制。這裏是數字「1」的十六進制形式。

相關問題