回答
它使用二進制manipultaors。 (假設整數是1個字節,並且使用兩個補碼進行存儲,等)
a = 1|2|4
意味着a = 00000001 or 00000010 or 00000100
,這是00000111,或7
b = 8
裝置b = 00001000
。
c = 2
表示c = 00000010
。
b |= a
裝置b = b | a
這意味着b = 00001000 or 00000111
,這是00001111,或15
~c
意味着not c
,這是11111101.
b &= ~c
裝置b = b & ~c
,這意味着b = 00001111 and 11111101
,這是00001101,或13
允許進入二進制模式: A = 0111(以十進制7) b = 1000(8) C = 0010(2)
然後我們OR b,其中A獲得b = 1111(15) c = 0010和〜c = 1101 最後b是否定的c,這給了我們c = 1101(13)
Ed發佈的鏈接是一個很好的鏈接。您是否一次一步分析操作員?你完全理解每一步發生了什麼?是否有一個特定的步驟,你堅持?或者你只是在整體數學上感到困惑?
a = 1|2|4
= 0b001
| 0b010
| 0b100
= 0b111
= 7
b = 8 = 0b1000
c = 2 = 0b10
b|a = 0b1000
| 0b0111
= 0b1111 = 15
~c = 0b111...1101
(b|a) & ~c = 0b00..001111
& 0b11..111101
= 0b00..001101
= 13
a = 1 | 2 | 4;
分配值7 a
。這是因爲你的常數1,2和4執行位操作OR
由於每個這些的二進制表示爲1時,在10和100分別,將得到111,其爲7。
b |= a;
This OR
s b
and a
並將結果分配給b
。由於b
的二進制表示現在是111和a
的二進制表示爲1000(8),則最終獲得1111或15
b &= ~c;
在此表達的~c
裝置的c
的按位求反。這實質上在0到1之間翻轉,反之亦然,在c
的二進制表示中。這意味着c
從10切換到111 ... 11101。
在否定c
之後,在b
和c
之間存在按位AND
操作。這意味着只有在b
和c
中都爲1的位保持爲1,其他都等於0。由於b
現在是1111,並且c
全是1,除了第二低位之外,b
的所有位都保持爲1,除了2位之外。
翻轉b
的2位結果與簡單地從其值中減去2相同。由於其當前值爲15,15-2 = 13,因此分配結果爲b == 13
。
- 1. C++和OpenGL幫助
- 2. 簡單的C++操作符重載幫助
- 3. C# - 需要幫助瞭解Lambda操作和<T>
- 4. 需要幫助瞭解C++中有效的C字符串操作
- 5. C#字符串幫助?
- 6. C++的幫助和問題
- 7. 幫助的SelectSingleNode,XML和C#
- 8. 幫助,用C
- 9. 幫助與C++
- 10. 幫助在C++
- 11. c#datagridview幫助
- 12. 字符串操作函數的幫助
- 13. Objective-C ^操作符
- 14. C/C++指針幫助
- 15. C/C + +註冊表幫助
- 16. 需要一些幫助操縱C#中的字符串?
- 17. DOM操作和GreaseMonkey的一點幫助
- 18. 幫助在課堂上的數學操作數(C#)
- 19. C#中的新操作符和虛擬操作符
- 20. 幫助與C++ MFC
- 21. 幫助Membership.GetUser ASP.NET C#
- 22. datagridview datetimepicker C#幫助
- 23. C++指針幫助?
- 24. C#TCP Server幫助
- 25. C++模板幫助
- 26. Ebay eBayAPIInterfaceClient C#幫助
- 27. 幫助Circle in C
- 28. 幫助C++邏輯?
- 29. c#線程幫助
- 30. C++的幫助simple_error()
在每一步之後在一張紙上寫下'a','b'和'c'的值。把它放在這裏,告訴我們你不明白的部分。 – dirkgently 2010-02-02 20:56:00