我低估了>>
運算符的複雜度;它沒有做我認爲會的事。意外的C#移位結果
我想右移6542454.一個uint
值我想它的工作是這樣的:
val (is) == 11000111101010001110110
val >> 1 == 1100011110101000111011
val >> 2 == 110001111010100011101
val >> 3 == 11000111101010001110
val >> 4 == 1100011110101000111
val >> 5 == 110001111010100011
val >> 6 == 11000111101010001
val >> 7 == 1100011110101000
在現實中,結果是:
val >> 1 == 1100011110101000111011
val >> 2 == 110001111010100011101
val >> 3 == 11111001100100110010011
val >> 4 == 1111100110010011001001
val >> 5 == 111110011001001100100
val >> 6 == 11111001100100110010
val >> 7 == 10011011111110111111100
第三操作顯然做了一些我不明白的事情,事情就從那裏消失了。似乎在第7次手術中做了我不明白的事情。
連續使用>>=
操作7次得到的值我希望:
val >>= 1 == 1100011110101000111011
val >>= 1 == 110001111010100011101
val >>= 1 == 11000111101010001110
val >>= 1 == 1100011110101000111
val >>= 1 == 110001111010100011
val >>= 1 == 11000111101010001
val >>= 1 == 1100011110101000
爲什麼val >> 3
與3個電話val >>= 1
不一樣?
UPDATE:
我對using a decimal to binary converter on the web that was truncating my decimal input to 7 digits故障。當從Visual Studio複製粘貼十進制值時,我沒有注意到截斷髮生。
正在移位的實際值是6542454 並且隨着每個人都正確指出,C#將這個值完美地進行位移。
您能否提供一個簡單的示例程序來複制問題?您所描述的行爲違反了C#規範,因此值得檢查是否存在不同的問題,例如代碼中計算轉換的運算符優先級問題。 – 2011-05-04 18:32:30
您可以顯示您用於打印出值的代碼嗎?您>> 3在Dec(8178067)中顯示的結果幾乎是正確的,而不是817806.因此,我猜您的打印代碼是關閉的...... – 2011-05-04 18:34:27
請顯示您的代碼。 – 2011-05-04 18:35:27