回答
这是位或。在这种情况下,编写位掩码很有用。这些标志定义了一个设置了一位的数字,当你将它们放在一起时,最终会得到一个两位都置位的数字。
例如: 我不知道这些标志的精确值,但让我们想象它们是:
#define GL_COLOR_BUFFER_BIT 0x01
#define GL_DEPTH_BUFFER_BIT 0x08
如果您在二进制写那些了,你会得到:
GL_COLOR_BUFFER_BIT = 00000001
GL_DEPTH_BUFFER_BIT = 00001000
如果你按位或那些在一起,您可以设置输出为1位,如果该位在任一GL_COLOR_BUFFER_BIT
ORGL_DEPTH_BUFFER_BIT
,所以设置:
GL_COLOR_BUFFER_BIT = 00000001
GL_DEPTH_BUFFER_BIT = 00001000
= 00001001
所以你最终得到的数字是0x09。
你打电话给你检查通过了号码的功能,并在此基础上位设置,它知道你传递什么标志。
这是一个按位或操作。按位或以下面显示的方式工作:
让我们假设您有2个字节a,b。
a = 0 0 1 1 0 1 0 1
b = 1 0 1 1 0 0 0 0
按位运算符在bit level
上工作。会发生什么,它会依次执行每一个操作并对其执行操作。如果至少有一个(或两个)位是1,则结果字节中的相应位也将是1。如果他们都是0,那么结果位也将是0
所以按位或a和b将做到这一点:
a = 0 0 1 1 0 1 0 1
b = 1 0 1 1 0 0 0 0
c = 1 0 1 1 0 1 0 1
首先位0和1有一个1在C位等等将是1. 秒位0和0,所以下一个结果位将是0. 第三位都是1。至少存在一个1,因此c中的下一位将是1 ...,依此类推。
希望它为你清除它。
PS。我在这里使用了虚拟位,并且决不对应于GL_COLOR_BUFFER_BIT
或GL_DEPTH_BUFFER_BIT
使用的实际值。
大多数按位运算符用于对值执行掩码或将两个值组合在一起。
|
将二者结合起来一起 &
将强制口罩
让我们假设您将得到一个数值,你想使它看起来像这样(我们将使用&
执行这一面罩)。
0 0 0 1 1 1 1 0
0将对应于不应该有值的位置,1对应于您感兴趣并想要提取的位。
a = 1 0 1 0 0 1 1 0
mask = 0 0 0 1 1 1 1 0
现在在所有位都高于0将被丢弃,结果将在这些位0,因为和&你需要两个位是1秒,以导致位1
在哪里你的掩码中有1,这就是结果中可能出现1的地方。因此,在每个位上使用&时,您最终会得到此值。
result = 0 0 0 0 0 1 1 0
如果你仔细看看结果中的4位,它们与掩码中的1s位置相同,只是从a中移出。所以它真的做了什么,删除了掩码有0的位,并用1保留。
这取决于你正在使用的语言,但在很多这是bitwise or。这通常用于将几个编码为一位的标志传递给一个函数。例如,如果你有两个标志
const char FLAG_1 = 0x01;
const char FLAG_2 = 0x02;
然后FLAG_1 | FLAG_2
是0x03
。对于按位不相交的位,这相当于加法,起初可能会造成混淆。在通话中的位进行逻辑或运算
func(FLAG_1 | FLAG_2) // set both FLAG_1 and FLAG_2
功能func
然后可以单独使用bitwise and测试位:
void func(char flags) {
if(flag & FLAG_1) { // test for FLAG_1
}
if(flag & FLAG_1) { // test for FLAG_2
}
}
- 1. ||是什么运营商呢?
- 2. 什么是按位或|运营商呢?
- 3. javascript:什么是不是? (!!运营商)
- 4. 运营商做什么?
- 5. ?的含义是什么?和??运营商
- 6. 什么是运营商=返回?
- 7. java |运营商是为了什么?
- 8. 运营商:在C,它是什么?
- 9. Php:|有什么区别?和||运营商
- 10. MySQL <=>运营商做什么?
- 11. C未运营商为什么会
- 12. 〜和!有什么区别?运营商?
- 13. 运营商'+'发生了什么?
- 14. |有什么区别?和||或运营商?
- 15. 你为什么要用!!运营商
- 16. 为什么运营商**在运营商^工作的地方失败?
- 17. 空 - 结合运营商和运营商&&
- 18. 或运营商与三元运营商
- 19. 什么是等价的C#的是和运营商在C++/CLI
- 20. C++使用,而不是运营商运营商INT()+
- 21. 是运营商在Python
- 22. “是” - 运营商类型
- 23. &&运营商JSONpath()
- 24. '运营商='
- 25. C#? :运营商
- 26. 运营商
- 27. jQuery @运营商?
- 28. +运营商
- 29. Javascript:?运营商
- 30. iPhone运营商
你能在更详细一点解释究竟是什么意思? – user2101672 2013-02-24 13:28:52
感谢您的解释! – user2101672 2013-02-24 13:34:35