1

この回答に記載されているガイドを確認しましたが、まだビットシフトを理解していません。特に、データ型が登場することについて混乱しています。

以下:

unsigned int a = pow(2,31);
cout << (a << 1);

intは 32 ビットであるため、予想どおり 0 を生成します1。左に移動すると、何も表示されません。

しかし、次の

unsigned int a = 1;
unsigned char b = (unsigned char)a;
cout << (unsigned int)(b<<8);

256 を生成します。それはなぜですか? 私の推測では、acharは 8 ビットなので、1 を左に 8 桁移動するとゼロになるはずです。

これを行う機能/シフトはありますか? (つまり1<<8、0 に評価されます)。

4

1 に答える 1

7

int狭い整数値は、使用されるまで、またはunsigned int使用される前に昇格されます。インテグラルプロモーションといいます。

于 2012-06-09T20:16:06.583 に答える