링버퍼 내 & 연산자를 모르겠습니다.
조회수 171회
c 언어 내에 있는 링버퍼 함수입니다. 저 안에서 *data = rb->buf[rb->read_index & rb->size]; 비트연산자 부분이 이해가 가질 않습니다. 만약 size가 5일 때 read_index가 2면 2를 가리키는게 맞을텐데 &는 비트연산자니까 0이 나오게 되지 않나요? 그냥 이해가 잘 안 가서 질문드립니다.
/**
* \brief Get one byte from ringbuffer
*
*/
int32_t ringbuffer_get(struct ringbuffer *const rb, uint8_t *data)
{
ASSERT(rb && data);
if (rb->write_index != rb->read_index) {
*data = rb->buf[rb->read_index & rb->size];
rb->read_index++;
return ERR_NONE;
}
return ERR_NOT_FOUND;
}
댓글 입력