C言語のシフトについて
シフト演算子 ">>" は算術シフトなのか?それとも論理シフトなのか?
という疑問がふと沸いたので調べてみた。
#include<stdio.h> int main(void) { int si = -1; unsigned int ui = -1; printf("%d\n", si); printf("%u\n", ui); printf("%d\n", si >> 31); printf("%d\n", ui >> 31); return 0; }
結果
-1 4294967295 -1 1
結論:
int の場合は算術シフト、
unsigned int の場合は論理シフトとなる。
(処理系によって違うかも?)
おまけ - リテラルの場合
#include<stdio.h> int main(void) { printf("%d\n", -1 >> 31); return 0; }
結果
-1
算術シフトでした。
(結果はすべてcodepadによるもの。)