这段代码什么意思,帮忙看一下,尽量说清楚原理,特别是位移,谢谢!

-(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'位