2 murphy838992535 murphy838992535 于 2016.03.03 13:24 提问

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

-(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;
}

}

4个回答

broust
broust   2016.03.03 16:51
已采纳

将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

ravatar0423
ravatar0423   2016.03.03 21:19

假设bitmapBytes的数据如下:[a,b,c,d,e,f,g]
1. char rowByte=bitmapBytes[row]; --> 取出数组中的第'row'个字母
2. char result=(1<对取出的字母,查找该字母的二进制位第'column'位

u010933908
u010933908   2016.03.03 18:00

位移用比较简单的解释就是乘除的意思,左移一位是乘2,右移一位是除2,这个从二进制可以知道是为什么

u010933908
u010933908   2016.03.03 18:01

用位移是计算机底层进行计算的,所以效率相对比较高

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!