C新手 - 这是什么意思?

时间:2014-06-07 12:09:53

标签: 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)

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

2)MAP_2是MAP_1 + 1的值吗?

3)MAP_3将是什么?

2 个答案:

答案 0 :(得分:5)

  

是否会为MAP_1分配固定值&#39; 1&#39; (为什么是十六进制?)?

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

  

MAP_2将是MAP_1 + 1的值吗?

不,它的值为MAP_1 * 2. <<是左移操作符。它以二进制乘以2(看看为什么,考虑将一个十进制数字移到一个位置)。

  

什么是MAP_3?

它将是3 - 21的按位OR运算的结果。

binary 0010 = decimal 2
        OR
binary 0001 = decimal 1
-----------   ---------
binary 0011 = decimal 3

答案 1 :(得分:1)

  • MAP_1为1,hex是任意的。
  • MAP_2是1&lt;&lt; 1(位移),因此分配的值将为2(二进制10)。
  • MAP_3是1 | 2(位或),因此该值将为3(二进制11)。
  • MAP_4是1&lt;&lt; 2,所以值为4(二进制100)。