2012-04-25 42 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”的十六进制形式。

相关问题