Console.WriteLine(7 << 4);
Console.WriteLine(7 >> (32 - 4));
出於某種原因,第二個方法返回0,而不是112,但他們都應該是彼此相等的,它們都應該返回112移位偏移返回一個錯誤的結果
UPDATE: 這是已知(x << n) == (x >> (32 - n))
。
您的想法?
Console.WriteLine(7 << 4);
Console.WriteLine(7 >> (32 - 4));
出於某種原因,第二個方法返回0,而不是112,但他們都應該是彼此相等的,它們都應該返回112移位偏移返回一個錯誤的結果
UPDATE: 這是已知(x << n) == (x >> (32 - n))
。
您的想法?
不要真的理解你希望在這裏看到:
7 << 4
被左移(如乘法)7 * (2^4) = 7 * 16 = 112
在另一方面
7 >> (32 - 4)
被右移(如分公司) 7/(2^28)
,轉換爲整數值導致0
。
的問題是,爲什麼Console.WriteLine
峯整數超載:是因爲你通過CLR
結果是int
作用於整數值所以預期。
所以結果是正確。
看我的更新 –
一個'>>'_是不是一個分部,它是一個轉變。只有沒有騎自行車的情況下,其結果與部門相同。 –
是正確的,我認爲這是*不*關於騎自行車,但看編輯答案看到它。編輯。 – Tigran
(x << n) == (x >> (32 - n))
這是唯一的,如果它是一個循環移位正在執行,這是不是在C#中的情況。在C#中,如果將位移過第一位,它們會丟失。
//Seven = 00000111
Console.WriteLine(7 >> 1); //00000011
Console.WriteLine(7 >> 2); //00000001
Console.WriteLine(7 >> 3); //00000000
Console.WriteLine(7 >> 4); //00000000
//.
//.
//.
Console.WriteLine(7 >> 28); //00000000
在這裏更詳細的解釋: Is there a way to perform a circular bit shift in C#?
你從哪裏得到的想法,這些都是循環? – Mat
在書中(.....) –
http://msdn.microsoft.com/en-us/library/aa691377(v=vs.71).aspx文檔。 – Mat