임베디드 시스템과 펌웨어
C 언어에서 레지스터 reg의 비트 3만 1로 만들고 나머지 비트는 바꾸지 않는 올바른 표기는 무엇입니까?
- Areg |= (1 << 3);
- Breg = (1 << 3);
- Creg &= (1 << 3);
정답과 해설 보기
정답: A. reg |= (1 << 3);
'1 << 3'은 2진수로 00001000이며 비트 3만 1인 값(마스크)입니다. 이것과 레지스터 값을 OR(|)로 합치면 비트 3은 반드시 1이 되고 나머지 비트는 원래 값 그대로 남습니다. 대입(=)을 쓰면 다른 비트까지 0으로 덮어써서 주변 회로의 다른 설정을 망가뜨립니다. 비트 번호는 최하위를 0으로 하여 셉니다.