2

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回インラインで変数に値を割り当てることの利点は何ですか。

4

2 に答える 2

4

作成者がnumColorsを1に等しいと宣言してから、同じ行のその変数に値bmih.biBitCountを割り当てるのはなぜですか?

彼はしません。1 << bmih.biBitCount彼は式の結果をに割り当てnumColorsます。割り当ては最後に行われます。 <<ビット単位の左シフト演算子です。このように考えてください:

//set Number of Colors
numColors = (1 << bmih.biBitCount);
于 2012-09-10T19:20:44.980 に答える
2

彼はそうではありません、そしてこれは<<「ストリーミング」オペレーターとして使用することが人々を混乱させる場合です。

<<and>>演算子は、従来はビットシフト演算子でした。これがこの場合の意味です。これらの演算子は、変数をいくつかの場所で左または右にシフトします。私たちが持っているとしましょうx = 0b00001(そしてあなたのコンパイラはそのようなバイナリ表記を理解します)。x << 2結果が得られ0b00100ます。

于 2012-09-10T19:20:54.160 に答える