-(BOOL)stateAtRow:(NSUInteger)row column:(NSUInteger)column{
const char *bitmapBytes=[self.bitmap bytes];//bitmap预先在里面存了一些字节
char rowByte=bitmapBytes[row];//????
char result=(1<<column)&rowByte;//这里位移是什么意思???
if (result!=0) {
return YES;
}else{
return NO;
}
}
将1往左边移动N位。
char result=(1<<column)&rowByte;
表示判断rowByte第N位的byte是否是1.
int 1 表示成2进制是 00000000 00000000 00000000 00000001
1<<2,就变成 00000000 00000000 00000000 00000100
然后&rowByte,那么如果rowByte的第3位是1,那么返回00000000 00000000 00000000 00000100,如果是0,那么返回0
位移用比较简单的解释就是乘除的意思,左移一位是乘2,右移一位是除2,这个从二进制可以知道是为什么
用位移是计算机底层进行计算的,所以效率相对比较高
假设bitmapBytes的数据如下:[a,b,c,d,e,f,g]
1. char rowByte=bitmapBytes[row]; --> 取出数组中的第'row'个字母
2. char result=(1<对取出的字母,查找该字母的二进制位第'column'位