我在C#中嘗試一些位運算符按位恭維,不知道如何讚美計算1爲什麼是1 -2
爲-2輸出。如果我代表1 8位二進制
1 = 00000001
〜1 = 11111110 =這是怎麼評估爲-2?
Sample code that i am using in C#
//Bitwise Compliment
//1 = 00000001
//~1 = 11111110 = -2
Console.WriteLine(~1);
我在C#中嘗試一些位運算符按位恭維,不知道如何讚美計算1爲什麼是1 -2
爲-2輸出。如果我代表1 8位二進制
1 = 00000001
〜1 = 11111110 =這是怎麼評估爲-2?
Sample code that i am using in C#
//Bitwise Compliment
//1 = 00000001
//~1 = 11111110 = -2
Console.WriteLine(~1);
那麼......你希望它是什麼?由於我們使用的是兩補表示這簡直是怎麼一回事:
00000011 = 3
00000010 = 2
00000001 = 1
00000000 = 0
11111111 = -1
11111110 = -2
11111101 = -3
11111100 = -4
如果我們將使用一complient表示,我們有這樣的列表,然後你會是正確的:
00000011 = 3
00000010 = 2
00000001 = 1
00000000 = 0
11111111 = -0 <== Watch this!!!
11111110 = -1
11111101 = -2
11111100 = -3
由於計算機構建者決定不具有負零,他們創建了二補數表示法。
如果你做一個按位補碼,所有的位都是相反的。所以00000001
將導致11111110
,這只是-2(當使用雙補充時)。
您是否在尋找否定運算符-
?
Console.WriteLine(-1);
順便說一句:補補否定運算符與補碼運算符加1(當使用雙補碼錶示法時)相同。
所以:
-x == ~x + 1;
欲瞭解更多信息:http://en.wikipedia.org/wiki/Signed_number_representations
你能告訴我在11111110,右邊的第一個數字是符號位,所以它表示它是負數。現在我應該計算這1111110 =(0 + 2 + 4 +8 .. 7次)來得到答案。 – Charu 2013-05-10 11:52:28
@Charu:當第7位被設置時,它得到值-128。所以公式可以是:2 + 4 + 8 + 16 + 32 + 64 -128。 – 2013-05-10 11:58:01
sbyte
,
short
,
int
和
long
)
符號整數使用Two's complement表示代表。在此,第一位表示符號,其餘表示數字。 (0..127從0000 0000..0111 1111開始計數,-128 ..- 1從1000 0000..1111 1111開始計數)
你可能一直期待的是你在按位一個unsigned int的稱讚:
uint b = 1;
uint a = (uint)~b;
// a == 4294967294, which is 2^32-2, or in binary,
// 11111111 11111111 11111111 11111110
如果您的八位代表一個帶符號的值,則僅比特1-7代表的數目,比特8指示的數量是否爲正(0)或負(1)。
要獲得您想要的行爲,您必須使用無符號類型。
因爲使用Two's Complement,所有位反轉,並添加一個。所以這是整個過程:
11111110 ; start
00000001 ; invert
00000010 ; add one
來源:link。
Negative int
數字英寸。NET被視爲two's-complement。這意味着:
1111....111111 = -1
1111....111110 = -2
1111....111101 = -3
1111....111100 = -4
etc;基本上,負x
等於2
base
-x
如果你不想底片,使用uint
代替int
.NET(和大多數語言)使用two's complement表示負數。在最簡單的解釋中,通過取one's complement(其涉及反轉每個位)並且然後添加1
來發現。
您的反演創造了補碼,這被解釋爲一個低於而不是二進制補碼。
稱爲負整數,如果你把「二進制負數」到谷歌,你會發現數十億文章。我真的很想知道你認爲從來沒有人寫過這樣的文章。 – zerkms 2013-05-10 11:49:01
[Negative binary numbers](http://www.allaboutcircuits.com/vol_4/chpt_2/3.html) – sloth 2013-05-10 11:51:58
http://en.wikipedia.org/wiki/Signed_number_representations 看看Two的補充。 您使用的是有簽名的號碼。爲了表示負數,許多系統使用二進制補碼。 – Doc 2013-05-10 11:50:29