c

C 언어 - 연산자, 조건문(1)

haniru 2025. 10. 30. 23:34

1. 증감연산자

전위, 후위 연산자는 한 라인에 여러개 사용하면 안된다

++a: 현재 라인에서 증감

a++: 다음 라인에서 증

 

2. 참/거짓 연산자

3. 논리 연산자

모든 정수값(1,2,3,4..)은 참이고 0은 거짓이다

&&(모두 참 아님 0), ||(둘중 하나 참이면 참), !(NOT)

 

4. 형변환 연산자

정수 + 실수 ⇒ 실수 + 실수, (int)10.7 ⇒ 10, (double)10 ⇒ 10.0

 

5. sizeof

참고로 sizeof 함수 선택 후 F1을 누르면 도큐먼트가 나옴 (https://learn.microsoft.com/ko-kr/cpp/cpp/sizeof-operator?view=msvc-170&devlangs=cpp&f1url=%3FappId%3DDev18IDEF1%26l%3DKO-KR%26k%3Dk(sizeof_CPP)%3Bk(sizeof)%3Bk(DevLang-C%2B%2B)%3Bk(TargetOS-Windows)%26rd%3Dtrue)

 

6. 복합대입연산자: +=, *= → = 이 무조건 마지막으로 온다

<<= : 왼쪽으로 2비트, >>= 오른쪽으로 2비트

비트 연산자가 곱하기 연산보다 비트 연산이 더 빠르다(a *= 2보다 a <<=2 가 빠르다)

7. 콤마 연산자

8. 삼항연산자

더보기

#include <stdio.h>

int main(void) {
    int num1 = 15;
    int num2 = 8;
    int max;

    // (num1이 num2보다 크면?) ? (num1을 선택) : (num2를 선택)
    max = (num1 > num2) ? num1 : num2; 

    printf("두 수 중 큰 값: %d\n", max); 
    
    return 0;
}

 

9. 비트연산자

~a 라는 연산이 이해가 안돼서 한번 물어봤다

더보기

질문

원본

00000000 00000000 00000000 00101100

구하는 과정:

  1. 11111111 11111111 11111111 11010011 (반전시킨다)
  2. 00000000 00000000 00000000 00101100 (둘이 더해준다)
  3. 11111111 11111111 11111111 11111111 (더해준 값)
  4. 1+2 = 3 즉, 44 + ??(2번) 은 -1이 되니까 ?? 가 -45가 되는건지?

답변

 

네! 정확히 이해하셨습니다! 🎉

✅ 수학적으로 보면:

text

44 + X = -1
X = -1 - 44
X = -45

그리고 X가 바로 ~44입니다!


🔍 비트 단위로 확인:

text

  00000000 00000000 00000000 00101100  (44)
+ 11111111 11111111 11111111 11010011  (??)
---------------------------------------
  11111111 11111111 11111111 11111111  (-1)

각 비트별로 보면:

  • 0 + 1 = 1
  • 1 + 0 = 1
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 0 = 1
  • 0 + 1 = 1

모든 자리에서 합이 1이 되니까 결과가 111...111(-1)이 나오는 거예요!


🎯 결론:

~44 = -45가 맞습니다!

이것이 NOT 연산의 핵심 성질이에요:

text

n + (~n) = -1
~n = -n - 1

지금 완전히 이해하신 거 맞아요! 😊

실질적인 코드

더보기

#include <stdio.h>

int main(void) { int a = 10; // 이진수: 00000000 00000000 00000000 00001010 int b = 12; // 이진수: 00000000 00000000 00000000 00001100

printf("a & b : %d\\n", a & b); // AND 연산

printf("a ^ b : %d\\n", a ^ b); // XOR 연산

printf("a | b : %d\\n", a | b); // OR 연산

printf("~a : %d\\n", ~a); // NOT 연산

printf("a << 1 : %d\\n", a << 1); // 왼쪽 시프트

printf("a >> 2 : %d\\n", a >> 2); // 오른쪽 시프트

return 0;

}

 

10. 연산자 우선순위

 

11. if 조건문

 

 

'c' 카테고리의 다른 글

반복문 (while, for)  (0) 2025.11.03
c 언어  (0) 2025.11.02
c 언어 - 변수와 상수  (0) 2025.10.29
visual studio 설치 및 기본적인 c 테스트  (0) 2025.10.28
wsl, msys2 설치  (0) 2025.10.28