Объявление переменной встроенной с присваиванием переполнения стека

Читая об обработке растровых изображений в C ++, я наткнулся на этот блок кода
используется для загрузки цветовой палитры с данными, взятыми из растрового файла:

//set Number of Colors
numColors = 1 << bmih.biBitCount;

//load the palette for 8 bits per pixel
if(bmih.biBitCount == 8) {
colours=new RGBQUAD[numColours];
fread(colours,sizeof(RGBQUAD),numColours,in);
}

где «bmih.biBitCount» является предопределенной переменной, которая уже имеет значение.
Почему автор объявляет numColors равным 1, а затем присваивает значение bmih.biBitCount этой переменной в той же строке? что именно это делает и каковы преимущества присвоения переменной значение в два раза, как это?

2

Решение

Почему автор объявляет numColors равным 1, а затем присваивает значение bmih.biBitCount этой переменной в той же строке?

Он не; он присваивает результат выражения 1 << bmih.biBitCount в numColors, Назначение происходит последним. << это побитовый левый оператор сдвига. Думайте об этом так:

//set Number of Colors
numColors = (1 << bmih.biBitCount);
4

Другие решения

Он не делает, и это тот случай, когда использование << так как «потоковый» оператор сбивает людей с толку.

<< а также >> операторы традиционно были операторами сдвига битов, что является их смыслом в данном случае. Эти операторы сдвигают переменную влево или вправо на несколько мест. Скажем у нас x = 0b00001 (и ваш компилятор так понимает двоичную запись). x << 2 даст результат 0b00100,

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector