在C语言中,此宏定义了什么?

问题描述

|
#define NUM_SQ_0 (1 << 1*1)  //<<----- ??

static struct square sq_0[NUM_SQ_0];
请注意,square是具有4个指向square的指针的结构,定义如下:
typedef struct square {
    struct square *nw,*ne,*sw,*se;
} *square;
    

解决方法

按照C ++运算符的优先级,首先对
*
运算符求值,然后求值
1
,然后将其向左移一位,即
2^1
或just5ѭ。     ,它的计算结果是向左移1位1,即数字也称为2。 由于乘法运算符
*
的绑定比移位运算符
<<
更紧密,因此表达式被解析为
1 << (1 * 1)
,即ѭ9just。 在二进制中,使用8位以提高可读性
  00000001
<<       1        
==========
  00000010
转换回十进制,我们得到000000102 = 210。     ,
1 << 1*1
的计算结果仅为
2
从宏的名称和后面的结构来看,可以想象有多个大小不同的数组,它们是由一系列移位乘以多个数字得出的。有一个13英镑...但这只是猜测...     ,一,左移一位。这将导致两个。我无法想象此宏的原理。     ,似乎是一种奇怪的回旋方式:
#define NUM_SQ_0 2
可能的目的是最终用另一个宏替换1 * 1中的一个(或两个)术语作为一种编译时参数,但从未被记录下来,最终被人们遗忘了。不幸的是,这种事情经常发生。     ,
1 << 1*1
0x01
左移一位,其结果为
0x02
。因此
NUM_SQ_0
等于2,
sq_0
是两个of20ѭ结构的数组。 例如。和
static struct square sq_0[2];
一样