• 締切済み

a が 16bit 整数のとき、a << 16

a が 16bit 整数のとき、 a << 16 は常に 0 になるのですか。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

その「思ったこと」を, 実際に試さないんですか?

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

式の評価において, 「int より短い値」はすべて int に自動的に変換されます. したがって ・short は 16bit ・int は 32bit という環境では (short)a<<16 という式は (int)(short)a<<16 のように評価されます. どこから「常に 0 になるのですか」という疑問が出てきたんだろう.

ahkrkr
質問者

お礼

回答ありがとうございます。 a<<16 は下位 16bit が 0 (32bit) (short)a<<16 は 0 (16bit) と思いました。 あるいは、 (short)a は 16bit (short)a<<16 はそれを左に 16bit シフトした 32bit ですか。

すると、全ての回答が全文表示されます。
回答No.1

ビットシフト演算子ですね。 16ビットの値を16回、左にシフトし、左詰めになった際、右端のビットには0が補完されますので、 a << 16 は常に0となります。 (例) a = 0xFFFF = 1111 1111 1111 1111 a << 1 = 1111 1111 1111 1110 a << 4 = 1111 1111 1111 0000 a << 8 = 1111 1111 0000 0000 a << 16 = 0000 0000 0000 0000

ahkrkr
質問者

お礼

ありがとうございました。 よく分かりました。

ahkrkr
質問者

補足

すみません。質問のしかたを間違ってました。 (short)a<<16 short は 16bit int は 32bit a は 32bit の場合はどうですか。

すると、全ての回答が全文表示されます。

関連するQ&A