C新手 - 这是什么意思?

use*_*303 -1 c

我在头文件中遇到了一些代码,我无法弄清楚它想说的是什么:

#define MAP_1 ((unsigned long)0x01) 
#define MAP_2 (MAP_1<<1)        
#define MAP_3 (MAP_1|MAP_2) 
#define MAP_4 (MAP_1<<2)
Run Code Online (Sandbox Code Playgroud)

1)MAP_1是否会被赋予固定值'1'(为什么是十六进制?)?

2)MAP_2是MAP_1 + 1的值吗?

3)MAP_3将是什么?

das*_*ght 5

MAP_1是否会被赋予固定值'1'(为什么是十六进制?)?

是的,它被赋值为1.十六进制通常用于强调如果某个数字用于其位模式而不是数字值的事实.在这种情况下,它不是必需的.

MAP_2是MAP_1 + 1的值吗?

不,它将具有MAP_1*2的值.这<<是一个左移操作员.它以二进制乘以2(看看为什么,想想将一个十进制数字移到一个位置).

什么是MAP_3?

这将是3-按位的OR-ing的结果21.

binary 0010 = decimal 2
        OR
binary 0001 = decimal 1
-----------   ---------
binary 0011 = decimal 3
Run Code Online (Sandbox Code Playgroud)