EP.2-1 변수와 사칙연산
Phase 2: Operations & Control Logic
EP.2-1 변수와 사칙연산 — 데이터의 흐름 만들기
메모리 예약부터 ALU의 물리적 연산까지
변수 선언: 메모리에 이름표 붙이기
PLC에서 D100이라는 주소를 직접 지정하듯, C언어에서는 int a;처럼 이름을 붙입니다. 이것은 메모리라는 거대한 창고에 '내 구역'을 확보하고 그릇의 크기를 정하는 행위입니다.
사칙연산: ALU(산술논리장치) 가동하기
CPU 내부의 ALU는 우리가 입력한 연산자(+, -, *, /)를 보고 전기 신호를 처리합니다. PLC의 ADD, SUB 명령어가 C언어에서는 간결한 기호로 대체됩니다.
- + (더하기), - (빼기): ALU 내부의 가산기 회로를 통과합니다.
- * (곱하기), / (나누기): 복잡한 논리 회로를 반복 통과하며 CPU 부하가 상대적으로 큽니다.
- % (나머지): 나눗셈 후 남은 레지스터 값을 낚아챕니다. 순환 제어에 필수적입니다.
#include <stdio.h>
int main() {
int input = 7;
int divider = 3;
printf("--- 산술 연산 결과 보고서 --- \n");
printf("더하기: %d \n", input + divider);
printf("나눗셈의 몫(/): %d \n", input / divider);
printf("나눗셈의 나머지(%%): %d \n", input % divider);
printf("--------------------------- \n");
return 0;
}
int main() {
int input = 7;
int divider = 3;
printf("--- 산술 연산 결과 보고서 --- \n");
printf("더하기: %d \n", input + divider);
printf("나눗셈의 몫(/): %d \n", input / divider);
printf("나눗셈의 나머지(%%): %d \n", input % divider);
printf("--------------------------- \n");
return 0;
}
💡 몫(/)과 나머지(%)의 물리적 분리
코드를 실행하면 7 / 3은 2를, 7 % 3은 1을 출력합니다. CPU는 단 한 번의 나눗셈으로 두 결과를 모두 계산해 놓았고, 우리는 연산자를 통해 필요한 레지스터 값을 선택해서 가져온 것입니다.
키보드를 입력하는 행위는 설계입니다. 이 설계도면(기계어)은 메모리에 저장되며, 어떤 ALU 연산자를 사용할지 경로를 미리 정해놓습니다.
- 설계 단계: 컴파일된 이진수들이 트랜지스터의 Base 단자에 각각 자리하게 됩니다.
- 연산 단계: 실행 시 이진수 신호들이 논리 게이트 미로를 전광석화처럼 통과하여 출력값을 뱉어냅니다.
- 출력 단계: CPU의 출력값에 맞춰 GPU가 픽셀 좌표를 빠르게 연산하고, 모니터의 3색(RGB) LED를 깨웁니다.
오버플로우와 2의 보수 검증
8비트 그릇(char)에 담긴 127에 1을 더하면 어떤 일이 벌어질까요? 물리적 한계를 시험해 봅니다.
#include <stdio.h> // # 삽입 필수!
int main() {
signed char cup = 127; // 0111 1111
printf("현재 값: %d \n", cup); // ; 종결 필수!
cup = cup + 1; // 1000 0000 (오버플로우 발생)
printf("1을 더한 후 결과: %d \n", cup);
return 0;
}
int main() {
signed char cup = 127; // 0111 1111
printf("현재 값: %d \n", cup); // ; 종결 필수!
cup = cup + 1; // 1000 0000 (오버플로우 발생)
printf("1을 더한 후 결과: %d \n", cup);
return 0;
}
결과는 128이 아닌 -128입니다. 최상위 비트가 뒤집히며 부호가 변하는 하드웨어적 특성을 직접 확인한 순간입니다.
🚨 트러블슈팅: 한글 깨짐(외계어) 해결책
출력 결과가 외계어로 나온다면 소스 파일과 콘솔의 인코딩 규격이 맞지 않는 것입니다. 다음 4단계를 통해 '코드 페이지 949'로 물리적 변환을 수행하십시오.





댓글
댓글 쓰기