算術シフト、論理シフト
using System; class Program { static void Display(int n) { Console.WriteLine(" int {0,12} {1,32}", n, Convert.ToString(n, 2)); } static void Display(uint n) { Console.WriteLine("uint {0,12} {1,32}", n, Convert.ToString(n, 2)); } static void Main() { int si = 1 << 31; Display(si); Display(si >> 1); Display(si >> 4); uint ui = 1U << 31; Display(ui); Display(ui >> 1); Display(ui >> 4); } }
実行結果です。
int -2147483648 10000000000000000000000000000000 int -1073741824 11000000000000000000000000000000 int -134217728 11111000000000000000000000000000 uint 2147483648 10000000000000000000000000000000 uint 1073741824 1000000000000000000000000000000 uint 134217728 1000000000000000000000000000
int(符号付き)だと、最上位ビット(符号ビット)が保存されたままになっています。