2013-06-04 49 views
-2

你好,我寫了一個小程序,以證明我面對補/負值不工作的權利

long n; 
n = 1; //1=0001 //2=0010 //-2=1101 

Console.WriteLine(n+" "+ ~n); 
Console.WriteLine(n+~n); 

問題和輸出是這樣的:

1 -2 
-1 

我知道〜應該給出相同的負數,但我得到的數字總是比原始數字 多一個根據以下鏈接我得到的答案應該是相同的,如果我加上否定原來的號碼我應該得到0而不是另一個號碼 http://visualcsharptutorials.com/reference/converting-negative-numbers-to-binary

誰能告訴我它有什麼問題嗎? 我使用.NET 4.5,C#5.0,VS 2012

+0

「正如我所知〜標誌應該給出相同的負數」 - 你從哪裏得到這個想法? –

+2

你應該再次閱讀那篇文章,你會發現你錯過了一個步驟。 – Jasper

+0

什麼是錯誤的是,你不明白如何補碼數字如何工作。請閱讀。 –

回答

1

您所描述的系統被稱爲ones' complement和它的在最現代的環境(包括C#)中使用的系統。用什麼是two's complement。在這個系統中,-1是1111,-2是1110等。這意味着你得到的數字是正確的,因爲~1 == -2