C 연산자


연산자는 컴파일러에게 특정 수학적 또는 논리적 연산을 수행하도록 지시하는 기호입니다. C 언어에는 풍부한 내장 연산자가 있으며 다음 유형의 연산자를 제공합니다.

  • 산술 연산자

  • 관계 연산자

  • 논리 연산자

  • 비트 연산자

  • 할당 연산자

  • 기타 연산자

이 장에서는 산술 연산자, 관계 연산자, 논리 연산자, 비트 연산자, 할당 연산자 및 기타 연산자를 하나씩 소개합니다.

산술 연산자

다음 표는 C 언어에서 지원하는 모든 산술 연산자를 보여줍니다. 변수 A의 값이 10이고 변수 B의 값이 20이라고 가정하면 다음과 같습니다.

을 얻습니다.
OperatorDescriptionExample
+두 피연산자를 추가합니다 에이 + B는 30
- 첫 번째 피연산자에서 두 번째 피연산자 를 뺍니다 A - B는 -10
* 두 피연산자를 곱합니다 A * B는 200
/분자를 분모로 나누면 B / A는 2
%모듈로 연산자, 정수 나누기 후 나머지B % A는 0
++증분을 얻습니다. 연산자, 정수 값을 1A++ 증가시키면 11
--감소 연산자, 정수 값을 1A만큼 감소-- 9
을 얻습니다.

예제

C 언어에서 사용할 수 있는 모든 산술 연산자에 대해 알아보려면 아래 예를 참조하세요.

#include <stdio.h>main(){   int a = 21;   int b = 10;   int c ;

   c = a + b;
   printf("Line 1 - c 的值是 %d\n", c );
   c = a - b;
   printf("Line 2 - c 的值是 %d\n", c );
   c = a * b;
   printf("Line 3 - c 的值是 %d\n", c );
   c = a / b;
   printf("Line 4 - c 的值是 %d\n", c );
   c = a % b;
   printf("Line 5 - c 的值是 %d\n", c );
   c = a++; 
   printf("Line 6 - c 的值是 %d\n", c );
   c = a--; 
   printf("Line 7 - c 的值是 %d\n", c );}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - c 的值是 31Line 2 - c 的值是 11Line 3 - c 的值是 210Line 4 - c 的值是 2Line 5 - c 的值是 1Line 6 - c 的值是 21Line 7 - c 的值是 22

관계 연산자

아래 표는 다음과 같습니다. C 언어에서 지원하는 모든 관계 연산자. 변수 A의 값이 10이고 변수 B의 값이 20이라고 가정하면,

OperatorDescriptionExample
==값이 20인지 확인하세요. 두 피연산자는 같음이며, 같으면 조건이 true입니다. (A == B)는 사실이 아닙니다.
!= 두 피연산자의 값이 같은지 확인하고, 그렇지 않으면 조건이 true입니다. (A != B)는 사실입니다.
> 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인하고, 그렇다면 조건이 true입니다. (A>B)는 사실이 아닙니다.
< 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은지 확인하고, 그렇다면 조건은 true입니다. (A < B)는 참입니다.
>= 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지 확인하고, 그렇다면 조건이 true입니다. (A >= B)는 사실이 아닙니다.
<=왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지 확인하고, 그렇다면 조건이 true입니다. (A <= B)는 참입니다.

예제

C 언어에서 사용할 수 있는 모든 관계 연산자를 이해하려면 아래 예를 참조하세요.

#include <stdio.h>main(){   int a = 21;   int b = 10;   int c ;   if( a == b )   {
      printf("Line 1 - a 等于 b\n" );   }   else   {
      printf("Line 1 - a 不等于 b\n" );   }   if ( a < b )   {
      printf("Line 2 - a 小于 b\n" );   }   else   {
      printf("Line 2 - a 不小于 b\n" );   }   if ( a > b )   {
      printf("Line 3 - a 大于 b\n" );   }   else   {
      printf("Line 3 - a 不大于 b\n" );   }   /* 改变 a 和 b 的值 */
   a = 5;
   b = 20;   if ( a <= b )   {
      printf("Line 4 - a 小于或等于 b\n" );   }   if ( b >= a )   {
      printf("Line 5 - b 大于或等于 b\n" );   }}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - a 不等于 bLine 2 - a 不小于 bLine 3 - a 大于 bLine 4 - a 小于或等于 bLine 5 - b 大于或等于 b

논리 연산자

다음 표는 C 언어에서 지원하는 모든 관계형 논리 연산자를 보여줍니다. 변수 A의 값이 1이고 변수 B의 값이 0이라고 가정하면 다음과 같습니다.

OperatorDescriptionExample
&&을 논리 AND 연산자라고 합니다. 두 피연산자가 모두 0이 아니면 조건은 참입니다. (A && B)는 거짓입니다.
||을 논리 OR 연산자라고 합니다. 두 피연산자 중 하나라도 0이 아니면 조건은 참입니다. (A || B)는 사실입니다.
!을 논리 NOT 연산자라고 합니다. 피연산자의 논리적 상태를 반전시키는 데 사용됩니다. 논리 NOT 연산자는 조건이 참인 경우 거짓으로 만듭니다. !(A && B)는 사실입니다.

예제

C 언어에서 사용할 수 있는 모든 논리 연산자를 이해하려면 아래 예를 살펴보세요.

#include <stdio.h>main(){   int a = 5;   int b = 20;   int c ;   if ( a && b )   {
      printf("Line 1 - 条件为真\n" );   }   if ( a || b )   {
      printf("Line 2 - 条件为真\n" );   }   /* 改变 a 和 b 的值 */
   a = 0;
   b = 10;   if ( a && b )   {
      printf("Line 3 - 条件为真\n" );   }   else   {
      printf("Line 3 - 条件不为真\n" );   }   if ( !(a && b) )   {
      printf("Line 4 - 条件为真\n" );   }}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - 条件为真Line 2 - 条件为真Line 3 - 条件不为真Line 4 - 条件为真

비트별 연산자

비트별 연산 문자 비트에 따라 작업을 수행하고 비트 단위로 작업을 수행합니다. &, | 및 ^의 실제 값은 다음과 같습니다.

0011 A = 60, B = 13이고 이제 이진 형식으로 표현하면 다음과 같다고 가정합니다.
pqp & qp ^ q
00 00
1011
1110
00 11

A = 0011 1100

B = 0000 1101

---- -------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

다음 표는 C를 보여줍니다. 언어 지원되는 비트 연산자. 변수

A

의 값이 60이고 변수 B의 값이 13이라고 가정하면 다음과 같습니다.

Operator&|^~<<>

예제

C 언어에서 사용할 수 있는 모든 비트 연산자에 대해 알아보려면 아래 예를 참조하세요.

#include <stdio.h>main(){   unsigned int a = 60;/* 60 = 0011 1100 */  
   unsigned int b = 13;/* 13 = 0000 1101 */   int c = 0;           

   c = a & b;       /* 12 = 0000 1100 */ 
   printf("Line 1 - c 的值是 %d\n", c );

   c = a | b;       /* 61 = 0011 1101 */
   printf("Line 2 - c 的值是 %d\n", c );

   c = a ^ b;       /* 49 = 0011 0001 */
   printf("Line 3 - c 的值是 %d\n", c );

   c = ~a;          /*-61 = 1100 0011 */
   printf("Line 4 - c 的值是 %d\n", c );

   c = a << 2;     /* 240 = 1111 0000 */
   printf("Line 5 - c 的值是 %d\n", c );

   c = a >> 2;     /* 15 = 0000 1111 */
   printf("Line 6 - c 的值是 %d\n", c );}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - c 的值是 12Line 2 - c 的值是 61Line 3 - c 的值是 49Line 4 - c 的值是 -61Line 5 - c 的值是 240Line 6 - c 的值是 15

할당 연산자

아래 목록 표 C 언어에서 지원하는 할당 연산자:

DescriptionInstance
두 피연산자 모두에 존재하는 경우 동시에 이진 AND 연산자는 결과에 1비트를 복사합니다. (A & B)는 12, 즉 0000 1100을 제공합니다.
두 피연산자 중 하나에 있는 경우 이진 OR 연산자는 결과에 1비트를 복사합니다. (A | B)는 0011 1101인 61을 얻습니다.
피연산자 중 하나에만 있고 둘 다에는 없으면 이진 XOR 연산자는 결과가 진행 중입니다. (A ^ B)는 49, 즉 0011 0001
2의 보수 연산자는 비트를 "뒤집는" 효과가 있는 단항 연산자입니다. (~A )는 -61, 즉 1100 0011, 2의 보수, 부호 있는 이진수를 제공합니다.
이진 왼쪽 시프트 연산자. 왼쪽 피연산자의 값은 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동합니다. A << 2는 240을 얻으며 이는 1111 0000
이진 오른쪽 시프트 연산자입니다. 왼쪽 피연산자의 값은 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 이동합니다. A >> 2는 15를 얻게 되며 이는 0000 1111
와 동일합니다.
OperatorDescriptionExample
=간단한 할당 연산자, 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다 C = A + B는 A + B의 값을 C
+=과 대입 연산자에 대입하고, 왼쪽 피연산자에 오른쪽 피연산자를 더한 결과를 왼쪽 피연산자 C += A는 C와 동일 = C + A
-=왼쪽 피연산자에서 오른쪽 피연산자를 뺀 결과를 왼쪽 피연산자에 할당하는 빼기 및 할당 연산자C -= A는 C = C - A
*=곱셈 및 대입 연산자, 오른쪽 피연산자와 왼쪽 피연산자를 곱한 결과가 왼쪽 피연산자에 할당됩니다.C *= A는 C = C * A
/= Division과 같습니다. 그리고 대입 연산자는 왼쪽 피연산자를 오른쪽 피연산자로 나눈 결과를 왼쪽 피연산자에 대입합니다C /= A는 C = C / A
%=모듈로와 대입 연산 연산자와 같습니다. 두 피연산자의 모듈러스를 계산하고 왼쪽 피연산자에 값을 할당합니다 C %= A는 C = C % A
<<=왼쪽 시프트 및 할당 연산자C <<와 같습니다. ;= 2는 C = C << 2
>>=오른쪽 시프트 및 할당 연산자C >>= 2는 C = C >>
&=비트 AND 및 할당 연산자C &= 2는 C = C & 2와 동일합니다
^=비트 XOR 및 할당 연산자C ^= 2는 동일합니다. In C = C ^ 2
|=비트 OR 및 대입 연산자C |= 2는 C = C | 2

와 동일합니다. 이해하려면 다음 예를 살펴보세요. C 언어에서 사용 가능한 모든 할당 연산자:

#include <stdio.h>main(){   int a = 21;   int c ;

   c =  a;
   printf("Line 1 - =  运算符实例,c 的值 = %d\n", c );

   c +=  a;
   printf("Line 2 - += 运算符实例,c 的值 = %d\n", c );

   c -=  a;
   printf("Line 3 - -= 运算符实例,c 的值 = %d\n", c );

   c *=  a;
   printf("Line 4 - *= 运算符实例,c 的值 = %d\n", c );

   c /=  a;
   printf("Line 5 - /= 运算符实例,c 的值 = %d\n", c );

   c  = 200;
   c %=  a;
   printf("Line 6 - %= 运算符实例,c 的值 = %d\n", c );

   c <<=  2;
   printf("Line 7 - <<= 运算符实例,c 的值 = %d\n", c );

   c >>=  2;
   printf("Line 8 - >>= 运算符实例,c 的值 = %d\n", c );

   c &=  2;
   printf("Line 9 - &= 运算符实例,c 的值 = %d\n", c );

   c ^=  2;
   printf("Line 10 - ^= 运算符实例,c 的值 = %d\n", c );

   c |=  2;
   printf("Line 11 - |= 运算符实例,c 的值 = %d\n", c );}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

Line 1 - =  运算符实例,c 的值 = 21Line 2 - += 运算符实例,c 的值 = 42Line 3 - -= 运算符实例,c 的值 = 21Line 4 - *= 运算符实例,c 的值 = 441Line 5 - /= 运算符实例,c 的值 = 21Line 6 - %= 运算符实例,c 的值 = 11Line 7 - <<= 运算符实例,c 的值 = 44Line 8 - >>= 运算符实例,c 的值 = 11Line 9 - &= 运算符实例,c 的值 = 2Line 10 - ^= 运算符实例,c 的值 = 0Line 11 - |= 运算符实例,c 的值 = 2

기타 연산자 ↦ sizeof & 삼항

다음 표에는 C 언어에서 지원되는 연산자가 나열되어 있습니다. 중요한 연산자에는 sizeof?가 포함됩니다.

OperatorDescriptionInstancesizeof()변수의 크기를 반환합니다. sizeof(a)는 4를 반환합니다. 여기서 a는 정수입니다. &변수의 주소를 반환합니다. &a;는 변수의 실제 주소를 제공합니다. *은 변수를 가리킵니다. *a; 변수를 가리킵니다. ? :조건식조건이 true이면 값은 X이고, 그렇지 않으면 값은 Y입니다.

C 언어에서 사용할 수 있는 모든 기타 연산자에 대해 알아보려면 아래 예를 살펴보세요.

#include <stdio.h>main(){   int a = 4;   short b;   double c;   int* ptr;   /* sizeof 运算符实例 */
   printf("Line 1 - 变量 a 的大小 = %d\n", sizeof(a) );
   printf("Line 2 - 变量 b 的大小 = %d\n", sizeof(b) );
   printf("Line 3 - 变量 c 的大小 = %d\n", sizeof(c) );   /* & 和 * 运算符实例 */
   ptr = &a;/* 'ptr' 现在包含 'a' 的地址 */
   printf("a 的值是 %d\n", a);
   printf("*ptr 是 %d\n", *ptr);   /* 三元运算符实例 */
   a = 10;
   b = (a == 1) ? 20: 30;
   printf( "b 的值是 %d\n", b );

   b = (a == 10) ? 20: 30;
   printf( "b 的值是 %d\n", b );}

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

a 的值是 4*ptr 是 4b 的值是 30b 的值是 20

C의 연산자 우선 순위

우선 순위 연산자의 수에 따라 표현식의 용어 조합이 결정됩니다. 이는 표현식이 평가되는 방식에 영향을 미칩니다. 일부 연산자는 다른 연산자보다 우선순위가 높습니다. 예를 들어 곱셈 및 나눗셈 연산자는 덧셈 및 뺄셈 연산자보다 우선순위가 높습니다.

예를 들어 x = 7 + 3 * 2, 여기서 x에는 20 대신 13이라는 값이 할당됩니다. 왜냐하면 * 연산자가 +보다 우선순위가 높기 때문에 곱셈 3*2가 먼저 계산된 다음 7이 더해지기 때문입니다. .

다음 표에는 연산자 우선 순위가 높은 순서대로 나열되어 있습니다. 우선 순위가 높은 연산자는 표 위에 표시되고 우선 순위가 낮은 연산자는 표 아래에 표시됩니다. 표현식에서는 우선순위가 높은 연산자가 먼저 평가됩니다.

오른쪽에서 왼쪽으로 왼쪽에서 오른쪽으로 왼쪽에서 오른쪽 왼쪽에서 오른쪽으로 관계 <= >= 왼쪽에서 오른쪽으로 잠깐만요 == != 왼쪽에서 오른쪽으로 비트 AND AND & 왼쪽에서 오른쪽으로 비트 XOR XOR ^ 왼쪽에서 오른쪽으로 비트와이즈 OR | 왼쪽에서 오른쪽으로 논리 AND AND && 왼쪽에서 오른쪽으로 논리 OR OR || 왼쪽에서 오른쪽으로 조건? : 오른쪽에서 왼쪽으로 할당 = += -= *= /= %=>>= <<= &= ^= |= 오른쪽에서 왼쪽으로 comma , from left to right
#include <stdio.h>main(){   int a = 20;   int b = 10;   int c = 15;   int d = 5;   int e;
 
   e = (a + b) * c / d;      // ( 30 * 15 ) / 5
   printf("(a + b) * c / d 的值是 %d\n",  e );

   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   printf("((a + b) * c) / d 的值是 %d\n" ,  e );

   e = (a + b) * (c / d);   // (30) * (15/5)
   printf("(a + b) * (c / d) 的值是 %d\n",  e );

   e = a + (b * c) / d;     //  20 + (150/5)
   printf("a + (b * c) / d 的值是 %d\n" ,  e );  
   return 0;}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다. 다음 결과:
(a + b) * c / d 的值是 90((a + b) * c) / d 的值是 90(a + b) * (c / d) 的值是 90a + (b * c) / d 的值是 50
카테고리 연산자 연관성
접미사 () [] -> 일달러 + - ! + - - (유형)* & sizeof
곱셈과 나눗셈 * / %
덧셈과 뺄셈 + -
Shift << >>
ExampleC 언어에서 연산자의 우선순위를 이해하려면 다음 예를 보세요.