*비트 연산자
(실습 예제 6.9)

| 연산자 | 이름 | 설명 | 예시 |
| & | AND (논리곱) | 둘 다 1이면 1 | 5 & 3 → 1 |
| | | OR (논리합) | 하나라도 1이면 1 | 5 | 3 → 7 |
| ^ | XOR (배타적 OR) | 다르면 1 | 5 ^ 3 → 6 |
| ~ | NOT (보수) | 비트를 반전 | ~5 → -6 |
· AND (&)
5 = 0101
3 = 0011
------------
0001 → 1
☞ 공통으로 1인 자리만 남김
· OR (|)
5 = 0101
3 = 0011
------------
0111 → 7
☞ 하나라도 1이면 1
· XOR (^)
5 = 0101
3 = 0011
------------
0110 → 6
☞ 서로 다르면 1
· NOT (~)
5 = 0000...0101
~5 = 1111...1010 → -6
☞ 모든 비트를 반전
☞ 2의 보수 표현 때문에 음수가 됨
*비트 시프트 연산자
(실습 예제 6.10)

- 4, 5행의 결과가 같음. 즉, 2의 배수 곱셈은 시프트 연산자로도 구현할 수 있다.
| 연산자 | 이름 | 설명 | 예시 |
| << | 왼쪽 시프트 | 비트를 왼쪽으로 이동 | 5 << 1 → 10 |
| >> | 오른쪽 시프트 | 비트를 오른쪽으로 이동 | 5 >> 1 → 2 |
· 왼쪽 시프트 (<<)
5 << 1
0101 → 1010 → 10
☞ 원래 값의 2배
· 오른쪽 시프트 (>>)
5 >> 1
0101 → 0010 → 2
☞ 원래 값의 1/2배
*삼항 조건 연산자 ( ? : )
(실습 예제 6.11 수정)

· 조건 ? 값1 : 값2
☞ 조건이 참 → 값1
☞ 조건이 거짓 → 값2
*증가, 감소 연산자
(실습 예제 6.12)

| 연산자 | 의미 | 순서 |
| ++a | 전위 증가, a를 1 증가시킨 후 수식 평가 | 증가 → 사용 |
| --a | 전위 감소, a를 1 감소시킨 후 수식 평가 | 감소 → 사용 |
| a++ | 후위 증가, 수식을 평가한 후 a를 1 증가 | 사용 → 증가 |
| a-- | 후위 감소, 수식을 평가한 후 a를 1 감소 | 사용 → 감소 |
· 전위 : 먼저 바꾸고 사용
· 후위 : 먼저 사용하고 나중에 바꿈
*cast 연산자
· 자동 형 변환 : 자료형이 서로 다른 혼합 연산에서는 기억 장소의 크기가 큰 쪽으로 통일시켜 연산이 이루어진다.
· 변환시키고자 하는 값이나 변수 앞에 해당 자료형을 괄호로 묶는다.
☞ (자료형)값 or 변수 - (int)x, (char)ch, (double)sum
(실습 예제 6.13)

*sizeof 연산자
(실습 예제 6.14)

- "대한"의 경우 윈도우 환경에서는 5바이트, 웹 환경에서는 7바이트
*주소(&) 연산자
(실습 예제 6.15)

+)
*실습


<코드>
#define _CRT_SECURE_NO_WARNINGS //Visual Studio에서 scanf 보안 경고를 끄기 위한 전처리기 지시문
#include <stdio.h> //표준 입출력 함수 (printf, scanf 등)를 사용하기 위한 헤더
int main(void) //프로그램의 시작점(main 함수)
{
char name[10]; //이름을 저장할 문자 배열 (최대 9글자 + null문자 1개)
printf("당신의 이름을 입력하세요:"); //사용자에게 이름 입력 안내
scanf("%s", name); //문자열 입력받아 name 배열에 저장
printf("이름: %s\n", name); //입력받은 이름 출력
int kor, eng, mat, total, max; //국어, 영어, 수학 점수 / 총점 / 최고점 변수 선언
double avg; //평균을 저장할 실수형 변수
printf("%s 학생의 총점과 평균, 최고점을 구하는 프로그램입니다.\n", name);
//입력받은 이름을 포함하여 안내 메시지 출력
printf("\n국어 점수를 입력하고 Enter를 누르세요="); //국어 점수 입력 안내
scanf("%d", &kor); //사용자로부터 국어 점수를 입력받아 kor에 저장
printf("\n영어 점수를 입력하고 Enter를 누르세요="); //영어 점수 입력 안내
scanf("%d", &eng); //영어 점수를 입력받아 eng에 저장
printf("\n수학 점수를 입력하고 Enter를 누르세요="); //수학 점수 입력 안내
scanf("%d", &mat); //수학 점수를 입력받아 mat에 저장
total = kor + eng + mat; //세 과목 점수를 더하여 총점 계산
avg = total / 3.0; //평균 계산 (3.0으로 나눠서 실수 연산 수행)
max = (kor > eng) ? kor : eng; //국어와 영어 중 더 큰 값을 max에 저장 (삼항 연산자 사용)
max = (max > mat) ? max : mat; //현재 max와 수학 점수를 비교해서 더 큰 값으로 갱신
printf("\n\n 당신의 총점은 %d이고, 평균은 %.2f입니다.", total, avg);
//총점은 정수(%d), 평균은 소수점 둘째 자리까지(%.2f) 출력
printf("\n당신의 과목 중 최고 점수는 %d점 입니다.", max);
//최고 점수 출력
return 0; //프로그램 정상 종료
}
'c언어 > 복습 과제' 카테고리의 다른 글
| c프로그래밍 11주차 (0) | 2026.05.13 |
|---|---|
| c프로그래밍 10주차 (0) | 2026.05.06 |
| c프로그래밍 7주차 (0) | 2026.04.15 |
| c프로그래밍 6주차 (0) | 2026.04.08 |
| c프로그래밍 5주차 (0) | 2026.04.01 |