我想知道jersey1是否有蓝色像素。另外,我发现这是使用按位运算符。为此,我应该使用按位和(&)或按位还是(|)。你能解释一下他们之间的差异吗?提前谢谢。
const unsigned int GREEN= 0x0000FF00; //green
const unsigned int RED = 0x00FF0000; //red
const unsigned int BLUE = 0x000000FF; //blue
const unsigned int RGB = RED | GREEN | BLUE;
unsigned int jersey1 = 123;
答案 0 :(得分:2)
使用按位和运算符jersey1 & BLUE
来屏蔽您感兴趣的值。
例如,要查看是否设置了蓝色位,您会说BCP
。如果值为0则没有蓝色位。如果它不为零,则设置蓝色位。
答案 1 :(得分:0)
您希望使用按位'&'测试jersey1中是否存在蓝色像素,如下所示:
if(jersey1 & BLUE)
{
cout << "It's blue!" << endl;
}
else
{
cout << "It's not blue!" << endl;
}
&#39;&amp;&#39;或&#34;和&#34;具有这些位的运算符要求每个值(BLUE和jersey1)的相同位置中的两个位等于1才能使其成立。然而,&#39; |&#39; (或)运算符只要求其中一个值中的一组位等于1.在上面的示例中,您使用过&#34;按位或&#34; (|),if语句总是为true,这不是你想要的。
答案 2 :(得分:0)
您可以将按位AND和OR运算符视为可以停止值(将其屏蔽掉)或让它们通过的门。如果你取一个值和一个掩码,并比较它们的二进制表示,那么AND运算符将在任何一个都有1的位置。一个OR运算符将有一个1,其中至少有一个有1。它看起来像这,垂直阅读:
0 1 0 1
0 0 1 1
------- AND
0 0 0 1
0 1 0 1
0 0 1 1
------- OR
0 1 1 1
颜色通常由十六进制值表示,其中包含颜色的每个红色,绿色和蓝色组件的256种可能的阴影。字节(通常)是按RRGGBB排序的。因此,您应该将int 123转换为十六进制以获得0x0000007B
,然后选择一个掩码来确定&#34; blue&#34;中的值。位置。 {实际上,我们已经可以看到蓝色位置有一个值,所以我们可能现在停止...}无论如何,只需将值掩盖到其蓝色通道,我们就会与一个只传递最后一个位置值的掩码。由于十六进制中的FF
给出了11111111
,并且传递了值,我们可以使用0000FF
进行掩码,这是为蓝色通道(BLUE
const)提供的掩码。您只需要测试(jersey1 & BLUE)
的值,看看它是否非零,以确定该频道中是否有蓝色。