回答
它使用二进制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