산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C 연산자 완전 정복: 산술, 관계, 논리, 비트, 대입, 우선순위 총정리

C 연산자는 피연산자에 연산을 수행하는 기호입니다. 6대 분류와 우선순위, 결합 법칙을 표로 정리하고 실수하기 쉬운 포인트를 짚습니다.

1. 산술 연산자

연산자이름예시 (A=10, B=3)결과
+덧셈A + B13
-뺄셈A - B7
*곱셈A * B30
/나눗셈A / B3 (정수 나눗셈: 버림)
%나머지 (모듈로)A % B1
++전위/후위 증가++A / A++11 / 10(후 값 11)
--전위/후위 감소--A / A--9 / 10(후 값 9)

주의: 정수 나눗셈은 0 방향으로 절삭. 음수 나머지 부호는 피제수(왼쪽) 따름 (C99부터).

2. 관계 연산자 (결과: 1=true, 0=false)

연산자의미예시 (A=5, B=10)
==같음A == B → 0
!=다름A != B → 1
>보다 큼A > B → 0
<보다 작음A < B → 1
>=크거나 같음A >= B → 0
<=작거나 같음A <= B → 1

3. 논리 연산자 (단락 평가 Short-circuit)

연산자이름동작예시 (A=1, B=0)
&&논리 AND왼쪽 거짓이면 오른쪽 평가 안 함A && B → 0
||논리 OR왼쪽 참이면 오른쪽 평가 안 함A || B → 1
!논리 NOT0→1, 0아닌값→0!A → 0

단락 평가 활용

if (ptr != NULL && ptr->data > 0)  // ptr NULL이면 뒤 평가 안 함 → 안전
if (x > 0 || (y = compute()) > 0)  // x>0이면 compute() 호출 안 함

4. 비트 연산자 (정수 타입만 적용)

연산자이름동작예시 (A=12=1100, B=10=1010)
&비트 AND둘 다 1이면 1A & B = 8 (1000)
|비트 OR둘 중 하나 1이면 1A | B = 14 (1110)
^비트 XOR서로 다르면 1A ^ B = 6 (0110)
~비트 NOT (보수)비트 반전~A = -13 (보수 표현)
<<왼쪽 시프트왼쪽으로 이동, 오른쪽 0 채움A << 2 = 48 (110000)
>>오른쪽 시프트오른쪽 이동, 부호비트 복사(산술) 또는 0 채움(논리)A >> 2 = 3 (0011)

비트 연산 실전 패턴

// 비트 설정
flags |= (1 << n);          // n번째 비트 1로
// 비트 클리어
flags &= ~(1 << n);         // n번째 비트 0으로
// 비트 토글
flags ^= (1 << n);          // n번째 비트 반전
// 비트 검사
if (flags & (1 << n)) ...   // n번째 비트가 1인가?
// 최하위 1비트 분리
x & (-x)                    // 2의 보수 활용
// 2의 거듭제곱 판별
(x & (x - 1)) == 0          // x > 0 가정

5. 대입 연산자

대입 표현식의 값은 왼쪽 피연산자의 새 값 (연쇄 대입 가능: a = b = c = 0)

6. 기타 중요 연산자

연산자예시동등 표현
=a = b-
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba = a / b
%=a %= ba = a % b
<<=a <<= ba = a << b
>>=a >>= ba = a >> b
&=a &= ba = a & b
^=a ^= ba = a ^ b
|=a |= ba = a | b
연산자이름설명예시
sizeof크기 연산자피연산자 타입/표현식 크기(바이트), 컴파일 타임sizeof(int), sizeof x
&주소 연산자변수 메모리 주소 반환 (lvalue만 가능)&x
*간접 참조포인터가 가리키는 값 접근*p
? :조건 연산자 (삼항)조건 ? 참값 : 거짓값, 표현식임max = (a>b)?a:b;
,콤마 연산자왼쪽 평가 후 오른쪽 평가, 값은 오른쪽i=0, j=1 → 1
. ->멤버 접근구조체/공용체 멤버 접근s.member, p->member
[]배열 인덱스a[i] ≡ *(a+i)arr[3]
()함수 호출함수 실행, 인자 전달func(1,2)
(type)캐스트강제 타입 변환(double)x

연산자 우선순위와 결합 법칙 (높은 → 낮은)

순위범주연산자결합
1후위() [] . -> ++ --왼→오
2단항++ -- + - ! ~ (type) * & sizeof오→왼
3곱셈류* / %왼→오
4덧셈류+ -왼→오
5시프트<< >>왼→오
6관계< <= > >=왼→오
7등가== !=왼→오
8비트 AND&왼→오
9비트 XOR^왼→오
10비트 OR|왼→오
11논리 AND&&왼→오
12논리 OR||왼→오
13조건? :오→왼
14대입= += -= *= /= %= &= ^= |= <<= >>=오→왼
15콤마,왼→오

우선순위 실수 예방

// 의도: a = (b + c) * d
a = b + c * d;      // 실제: a = b + (c * d)  ✗
a = (b + c) * d;    // 괄호로 명시  ✓

// 비트 연산자 우선순위가 비교/논리보다 낮음
if (flags & MASK == 0)   // 실제: flags & (MASK == 0)  ✗
if ((flags & MASK) == 0) // 괄호 필수  ✓

모범 사례

C 언어

  1. C# 연산자 – C# 연산자 종합 가이드
  2. C# 비트 연산자와 시프트 연산자 완전 정복: 종합 가이드
  3. C++ 연산자 마스터하기: 유형별 완벽 가이드와 실전 예제
  4. C 프로그래밍 연산자 완벽 가이드
  5. 파이썬 연산자 마스터하기: 종합 가이드
  6. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  7. C 비트 연산자 마스터: AND, OR, XOR, 시프트, 컴플리먼트
  8. Verilog 연산자 총정리: 산술·관계·등가·논리·비트와이즈·시프트
  9. Java 핵심 연산자: 종합 가이드
  10. C++ 연산자 종합 가이드: 종류, 사용법, 우선순위