checkImage[0][31][0] = FF, checkImage[0][31][1] = FF, checkImage[0][31][2] = FF
上面的规律是,不管最高位是否为1,只要二进制的千分位为1,就可在和0x8位与后其值为真。
在所有小于64的数中,符合二进制的千分位为1这个条件的数有:
8 - 15
24 - 31
40 - 47
56 - 63
揭秘完毕,总结规律:
位与运算不仅可以屏蔽特定位,巧用位与表达式可以在特定数值间来回翻转。
例如:如果需要连续的4个数且每隔4位翻转一次,则可用下面的代码:
for (int i = 0; i < 30; i++) {
if ((i &0x4) == 0) {
printf("%d ", i);
}
}
结果为:
0 1 2 3 8 9 10 11 16 17 18 19 24 25 26 27
多试几个数,以期获得规律的灵感。
下面将checkImageWidth及checkImageHeight均改为256之后,将屏蔽因子改为0x16后的
图像:
0x32的图像:
实在是没力去思考为什么了。
摘自 Sarkuya的 编程园地