问题描述
|
#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];
一样