typedef массив постоянной длины - PullRequest
0 голосов
/ 13 ноября 2011

Что это делает и как?

typedef int map_t [1<<MAX];

Что делает эта строка?

Ответы [ 2 ]

8 голосов
/ 13 ноября 2011

Если MAX является постоянной, известной во время компиляции, то этот код:

typedef int map_t [1<<MAX];
map_t x;

такой же, как этот код:

int x[1 << MAX];
6 голосов
/ 13 ноября 2011

Давайте предположим, что 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много, но вышесказанное должно скомпилироваться, верно?

Редактировать: вышеприведенное не компилируется, но если бы мы динамически выделяли его, оно должно работать.

...