공부/C++

연산자, 증감 연산자, 비교 연산자, 논리 연산자, 조건부 연산자, 연산자 우선순위, scanf, 서식 지정자, 문자열 입력, if 조건문, switch 조건문, 문자열 비교 strcmp

월러비 2025. 5. 30. 18:27

변수 연산

  • 연산은 항상 ‘결과를 리턴’한다.

연산자

  • 연산자 : 하나 이상의 피연산자
  • 대입 연산자 (=) : 우측 값을 좌측 변수에 저장
    • 복합 대입 연산자 : 타 연산과 대입 연산 결합. 코드 간결화
      • 종류 : +=, -=, *=, /=, %= 등..
      • a += b; 와 a = a + b; 의 리턴 결과는 같다.
  • 연산자는 우선순위가 있다.
    • 산술 연산자(+)가 대입연산자(=) 보다 더 빨리 연산된다.
  • 피연산자가 2개 이상 있는 연산자를 ‘이항연산자’라고 부른다.

증감 연산자

int a = 5;
int b;

// 전위 증가: a를 먼저 1 증가(a=6), 그 값을 b에 대입 (b=6)
b = ++a;
printf("=== 전치 증가 연산 ===\\n");
printf("a = %d\\n", a); // 6
printf("b = %d\\n", b); // 6

// 후위 증가: a 현재 값(6)을 b에 먼저 대입(b=6), 후 a를 1 증가 (a=7)
b = a++;
printf("=== 후치 증가 연산 ===\\n");
printf("a = %d\\n", a); // 7
printf("b = %d\\n", b); // 6
  • 변수 값 1 증가 또는 감소
    • ‘단항 연산자’ 라고 부르기도 한다.
    • 증가 (++): a++ (후위), ++a (전위).
    • 감소 (--): a-- (후위), a (전위).
  • 연산자가 붙은 위치에 따라 리턴하는 타이밍이 달라진다.
    • 전위(Prefix): 값 증감 후 결과 사용.
    • 후위(Postfix): 현재 값 사용 후 값 증감.

비교 연산자

int a = 30, b = 50;

// printf %d로 bool 값 출력 시 0 또는 1
bool p = a > b;  // 30 > 50  -> false (0)
bool q = a < b;  // 30 < 50  -> true (1)
bool r = a == b; // 30 == 50 -> false (0)
  • 비교 연산자 : 두 값을 비교하여 참 또는 거짓을 반환한다.
    • , <, ≥, ≤, ==, ≠
    • 인데 값이 같다면? : false를 반환한다.
  • 진릿값 (boolean value) : 참 또는 거짓을 의미한다.
    • true, false
  • 주로 ‘조건식’에 사용된다.

논리 연산자

int a = 3;

bool p = a >= 1 && a <= 10;  // a가 1 이상이고 (true) 그리고 a가 10 이하이다 (true) -> true (1)
bool q = a == 3 || a == 7;   // a가 3이거나 (true) 또는 a가 7이다 (false) -> true (1)
bool r = !q;                 // q가 true이므로 !q는 false (0)
  • 연산 결과가 bool형으로 반환되지만 피 연산자 모두 bool 형으로 비교해야한다.
    • &&, ||은 이항 연산자다.
    • |은 단항 연산자다.
  • && (논리곱): 두 피연산자 모두 참일 때 참.
  • || (논리합): 두 피연산자 중 하나라도 참이면 참.
  • ! (논리부정): 피연산자 논리값 반전.

조건부 연산자 ?:

  • 조건 ? (참의 결과) : (거짓의 결과) 형식으로 작성한다.
  • 조건부 연산자 : 3개의 피연산자를 사용하는 연산자다.
    • 조건이 참이라면 참의 결과가 리턴되고, 거짓이라면 거짓의 결과가 리턴된다.
    • 만약, 참과 거짓 항에 식이 존재한다면? 해당 식의 결과가 최종 연산 결과가 된다.

연산자 우선순위

  • 여러 연산자 사용 시 연산 순서 결정 규칙이다.
    • 일반적 순서 : 괄호 > 단항 연산 > 산술 > 비교 > 논리
    • 괄호 () : 우선순위 명시적 지정. 최우선으로 수행한다.
    • 기본 순서는 왼쪽에서 오른쪽으로 진행한다.
      • 대입 연산자는 오른쪽 결과를 왼쪽으로 대입하여 오른쪽 → 왼쪽이다.
  • 이항 연산자보다 단항 연산자가 우선순위가 높다.

입력받기

scanf

int a, b;
    // 사용자에게 두 개의 정수 입력을 요청하고,
    // 입력된 값을 변수 a와 b의 메모리 주소에 각각 저장함.
    scanf("%d%d", &a, &b); // %d는 정수형 서식 지정자
    printf("%d + %d = %d\\\\n", a, b, a + b); // 입력받은 두 수의 합 출력
  • 표준 입력(일반적으로 키보드)으로부터 형식에 맞춰 데이터를 읽어 변수에 저장하는 함수
    • 표준입력함수다. (printf : 표준 출력 함수)
    • 콘솔창으로 입력을 받는다.
    • %자료형 에서 자료형을 반드시 구분해줘야한다.
  • 서식 지정자의 자료형이 안맞는 경우가 발생할 수 있다.
  • return(enter)키를 눌렀을때 작동한다.
  • 순서
    • 입력버퍼 - return 키가 눌리기 전까지 대기
    • 입력
    • 공백 단위로 자른다.
      • 띄어쓰기를 기준으로 하나의 인자를 구분한다.
      • 인자에 채워질때까지 하나씩 넣는다.
  • 입력버퍼
    • 띄어쓰기를 기준으로 처리한다.
    • 공백을 만날때까지 가져오는 것이다.
    • %d%d → 123 ^ 123 ^ 123^ 123 → 123 ^ 123까지만 가져오고 다시 깜빡인다.
  • & : 어드레스 연산자.
    • 단항 연산자다.
    • 메모리 공간의 ‘주소값’을 리턴한다.
    • 즉, 포인터형 : 변수의 주소를 표현하는 변수다.
    • 결론 : a의 주소값을 받겠다는것이다.

서식 지정자

서식 지정자 설명 대응 자료형 예시

%d 10진수 정수 int
%ld 10진수 long 정수 long int
%lld 10진수 long long 정수 long long int
%u 부호 없는 10진수 정수 unsigned int
%o 8진수 정수 int
%x, %X 16진수 정수 int
%f 단정밀도 실수 (float) float
%lf 배정밀도 실수 (double) double
%Lf 확장 배정밀도 실수 long double
%c 단일 문자 char
%s 문자열 char 배열 (char\*)
%p 포인터 주소값 포인터 변수
  • 주의 : 문자열을 입력받을 배열의 크기가 넘어가는 경우 ‘오버플로우’가 발생한다.
    • 문자열 : char형이 여러개가 연결되어있는 형태의 자료형이다.

문자열 입력

  • char 변수명[바이트 수]
  • 한글은 한글자당 ‘2바이트’가 필요하다.
    • 이름이 3문자라면 6바이트 + 1바이트가 필요하다.
  • 문자열 입력은 & 어드레스 연산자를 사용하면 안된다.
    • 배열은 ‘이름 자체가 주소’다.

조건문과 반복문

  • 프로그램에 흐름에 영향을 미치는것
    • 조건문
    • 함수
    • 예외처리
    • 멀티쓰레드 : 프로그램 흐름이 여러개 있다는 것이다.
  • 조건식 : 결과가 참 거짓으로 끝나는 식이다.
    • 식 이란? : 피연산자와 연산자가 섞인것이다.
    • 연산자란?
  • 반복문 : 특정 구간을 반복시키는 식이다.

if 조건문

if (조건식) {
    // 조건식이 참일 때 실행될 코드
}
  • if 문 : 주어진 조건식이 참(true)일 경우에만 특정 코드 블록을 실행
    • 참일 경우 코드블럭을 실행하고, 거짓일경우 건너 뛴다.
    • 코드가 한 줄일 경우 코드블럭을 안써도 된다.
      • 다만 오류가 날 가능성이 많기에 쓰는게 좋다.
if (조건식) {
    // 조건식이 참일 때 실행될 코드
} else {
    // 조건식이 거짓일 때 실행될 코드
}
  • if - else 문 : 조건식이 참일 때 실행할 코드와 거짓일 때 실행할 코드를 각각 지정한다.
if (조건식1) {
    // 조건식1이 참일 때 실행
} else if (조건식2) {
    // 조건식1이 거짓이고 조건식2가 참일 때 실행
} else {
    // 모든 조건식이 거짓일 때 실행
}
  • 다중 조건문 (if - else if - else) : 여러 조건 중 하나를 선택하여 해당 코드 블록 실행한다.
    • 위쪽이 작은 범위를 검사해야 아래까지 안넘어간다.
    • 실행하는 순서가 중요하다.
  • 중첩 조건문 : if문 또는 else문 내부에 또 다른 if문을 사용하는 구조다.
    • 복잡한 조건 분기 처리에 사용한다.

switch 조건문

switch (변수) {
    case 값1:
        // 변수 == 값1일 때 실행될 코드
        break; // switch 문 탈출
    case 값2:
        // 변수 == 값2일 때 실행될 코드
        break;
    // ... 여러 case
    default: // 선택 사항
        // 어떤 case에도 해당하지 않을 때 실행될 코드
        break;
}
  • switch 문 : 변수의 값이 특정 case와 일치할 경우 해당 case의 코드부터 실행한다.
    • 주로 정수형 또는 문자형 변수의 값에 따라 분기할 때 사용
    • if-else if 문으로 대체 가능하나, 가독성이 더 좋을 수 있다.
    • break문이 없다면 모든 case 의 코드가 전부 실행된다.
    • 변수의 조건이 맞는다고 바로 실행되는것이 아니라 case1부터 하나씩 검사해서 실행되는것이다.
  • break 문: 해당 case 실행 후 switch 문을 빠져나가도록 함. 생략 시 다음 case 코드가 연이어 실행 (Fall-through).
  • default 절: 어떤 case 값과도 일치하지 않을 때 실행 (선택 사항)

문자열 비교 strcmp(문자열1, 문자열2)

  • 각 문자열의 첫 번째 문자를 비교하여 서로 같거나 다르면 종료, Null 에 도달할 때까지 비교를 계속한다.
    • <0 : 문자열1의 비교한 문자가 문자열2의 문자의 ‘아스키 코드’ 값이 낮다.
    • 0 : 더 큰 값이다.
    • 0 : 두 문자열의 내용이 동일하다.
  • 리턴값은 int 형이다.