我有以下代码段
for(int row=0; row<r; row++)
{
for(int col=0; col<c; col++)
{
alphaPixels[row][col] = ((RGBarray[ii]>>24)&0xff);
redPixels[row][col] = ((RGBarray[ii]>>16)&0xff);
greenPixels[row][col] = ((RGBarray[ii]>>8)&0xff);
bluePixels[row][col] = (RGBarray[ii]&0xff);
ii++;
}
}
为什么我们必须在移位操作后使用按位AND运算& 0xff
?
答案 0 :(得分:2)
为什么我们必须使用按位AND运算&#39; &安培; 0xff的&#39;之后 转移操作?
Oxff
是十六进制数,等于十进制255。
在您的情况下,& 0xff
确保所有像素值范围在0到255之间(即正8位)。例如,如果任何值大于255,则会将其截断为0-255
int value=257;
int result = value & 0xff; // result will be 1
因此,它的作用类似于正值的余数运算符%
。但是按位运算符&
比余数运算符%
更快。
int result = value % 256; //You will get same result for positive value
答案 1 :(得分:1)
0xff
的整数值为255。
>> n
右移数字n
位,&
运算符执行按位 AND操作。
所以& 0xff
掩盖变量。它只留下最后 8 位的值,并忽略所有其余位。
当您尝试将颜色值从特殊格式转换为标准RGB值(因为它具有8位)时,这是一个常见的技巧。