Давайте предположим, что MAX определен как 8:
typedef int map_t[1<<MAX];
совпадает с
typedef int map_t[256];
, потому что 1 << 8
= 256. Это означает сдвиг битов в числе 1 8 раз дляслева так:
1 - 0000 0001 в двоичном формате
после 1 смены:
0000 0010, то есть 2 в десятичной системе
после 8 смен:
1 0000 0000, то есть 256 в десятичном виде
Так что здесь нет битовой маскировки, это просто простой способ сказать
typedef int map_t[pow(2,MAX)];
Я не сделал Cмного, но вышесказанное должно скомпилироваться, верно?
Редактировать: вышеприведенное не компилируется, но если бы мы динамически выделяли его, оно должно работать.