*비트 연산자

(실습 예제 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