링버퍼 내 & 연산자를 모르겠습니다.

조회수 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;
}

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)