그라운드 임베디드 EN 유튜브 구독

노트 / 디지털 논리

2진수, 16진수, 2의 보수

레지스터 값은 16진수로 읽고, 음수는 2의 보수로 저장됩니다. 데이터시트와 디버거 화면을 읽기 위한 숫자 감각.

GROUND EMBEDDED · 정리 노트디지털 논리 012진수, 16진수, 2의 보수 1int16_t accel = (int16_t)((buf[0] << 8)…// MP…

컴퓨터 안의 모든 값은 0과 1입니다. 32비트를 2진수로 쓰면 너무 길어서 4비트씩 묶어 16진수 한 자리로 씁니다.

2진수 16진수 10진수
0000 0 0
1010 A 10
1111 F 15

0x4002_0014 같은 주소나 0x3C 같은 레지스터 값이 나오면 머릿속에서 4비트씩 펼쳐 봅니다. 0x3C는 0011 1100이니 2~5번 비트가 켜져 있습니다.

1010A01015= 0xA510진수 165
같은 값을 세 가지로 쓴 것. 16진수 한 자리가 2진수 네 자리입니다.

2의 보수

+50000 0101뒤집기1111 1010+ 1−51111 1011
음수 만들기. 비트를 모두 뒤집고 1을 더합니다.

음수는 "모든 비트를 뒤집고 1을 더한" 값으로 저장합니다. 8비트에서 -1은 0xFF, -128은 0x80입니다. 이렇게 하면 덧셈 회로 하나로 뺄셈까지 할 수 있습니다.

같은 0xFF가 uint8_t로 읽으면 255, int8_t로 읽으면 -1입니다. 센서가 보낸 16비트 원시값을 부호 있는 자료형으로 받아야 하는 이유가 여기에 있습니다.

int16_t accel = (int16_t)((buf[0] << 8) | buf[1]);   // MPU6050 가속도
영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →