0x0040和管道符号在这里表示什么?
这里SIMPLE_EX2与0x0040进行“或”操作,整个提供作为SIMPLE_EX1的地址。 我的理解是否正确?
#define SIMPLE_EX1 (0x0040 | SIMPLE_EX2)
|
不是C中的管道标志。这是一个有点明智或。 所以这个表达式:
0x0040 | SIMPLE_EX2
只需获取SIMPLE_EX2
的值并将其设置为第7位(从右侧)到1。
不太可能,但请注意,如果SIMPLE_EX2
本身是一个表达式,其运算符的优先级低于|
,整体表达可能被错误地解释。 例如,如果SIMPLE_EX2
是a?b:c
,则SIMPLE_EX1
变为(0x0040|a)?b:c
,这不是我上面写的。
如果你正在学习C ++,你应该阅读一本好的C编程书(如果你正在学习C),或者是一本好的C ++编程书。
假设SIMPLE_EX2
是#define
-d作为常量整数,或括号中的常量整数表达式,则SIMPLE_EX1
是具有0x0040
hex常量的整数位(即十进制64,或二进制0b1000000)。
SIMPLE_EX2与0x0040进行“或”运算
是。
以及整个提供作为SIMPLE_EX1的地址。
没有。
#define预处理器指令基本上是一个在编译之前完成的查找和替换文本操作。 没有更多,也没有注意到。 因此,无论何时在代码中编写SIMPLE_EX1
,在编译之前SIMPLE_EX1
在文本上替换为(0x0040 | SIMPLE_EX2)
。
有趣的代码片段说明了这一点:
#define SIX 1+5 #define NINE 8+1 printf("Six times nine is %d.", SIX * NINE);
此代码将返回42,而不是像预期的那样54,因为预处理器将整个程序转换为:
printf("Six times nine is %d.", 1 + 5 * 8 + 1);
它只是为SIMPLE_EX2
设置右起第7位并将其分配给SIMPLE_EX1