6.5.7 ビット単位のシフト演算子
シフト式:
加減式
シフト式 << 加減式
シフト式 >> 加減式
制約 各オペランドは,整数型をもたなければならない。
意味規則 整数拡張を各オペランドに適用する。結果の型は,左オペランドを拡張した後の
型とする。右オペランドの値が負であるか,又は拡張した左オペランドの幅以上の場合,
その動作は,未定義とする。
----
このことから、ビットパターンを出力する以下のコードは c の値によって動作するか否かが決まる。型によってオペレーターの幅は異なるため、頭の隅にいれておく必要があろう。間違っても俺のように何も考えずに100ビットとかシフトさせようとしないでください(´ー`; )
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned long long a = 65535; // long long は一般に64bitの幅を持つ
int c;
for (c = 63; c >= 0;c--) { // c を 64にすると途端に動作しなくなる
printf("%d", (int)((a >> c) & 1));
}
printf("\n");
return 0;
}
0 件のコメント:
コメントを投稿