这段C语言代码的功能是什么?表达式i%8 & 0x1含义解析
这段C语言代码的功能及关键表达式解析
整体功能
这个n_b函数的作用很明确:从addr指向的字节数组里,取出第i个二进制位的数值,返回0或者1。相当于把一堆字节当成一长串连续的二进制位,精准提取指定位置的单比特值。
关键代码拆解
定位目标字节:
char char_in_chain = addr[i / 8];
每个char类型占8个二进制位,用整数除法i / 8就能算出第i位落在哪个字节里,把这个字节的值存到char_in_chain中。提取目标位的值:
return char_in_chain >> i%8 & 0x1;
你提到的i%8 & 0x1其实是对代码表达式的误解,原代码是先执行右移操作,再做按位与,完整的运算顺序(加括号更清晰)是(char_in_chain >> (i%8)) & 0x1,拆解来看:i%8:计算第i位在目标字节内的偏移位置(范围0~7,0对应字节的最低位,7对应最高位)。比如i=10,10%8=2,就表示目标位在对应字节的第2位。char_in_chain >> (i%8):把目标位向右移动到整个字节的最低位。比如目标位是字节里的第3位,右移3位后,这个位就到了最低位的位置。& 0x1:用二进制00000001的掩码做按位与操作,只保留最低位的数值,也就是目标位的0或1,这就是最终返回的结果。
内容的提问来源于stack exchange,提问作者aphfug
相关产品推荐
相关产品推荐

