C 연산자
연산자는 컴파일러에게 특정 수학적 또는 논리적 연산을 수행하도록 지시하는 기호입니다. C 언어에는 풍부한 내장 연산자가 있으며 다음 유형의 연산자를 제공합니다.
산술 연산자
관계 연산자
논리 연산자
비트 연산자
할당 연산자
기타 연산자
이 장에서는 산술 연산자, 관계 연산자, 논리 연산자, 비트 연산자, 할당 연산자 및 기타 연산자를 하나씩 소개합니다.
산술 연산자
다음 표는 C 언어에서 지원하는 모든 산술 연산자를 보여줍니다. 변수 A의 값이 10이고 변수 B의 값이 20이라고 가정하면 다음과 같습니다.
Operator | Description | Example |
---|---|---|
+ | 두 피연산자를 추가합니다 | 에이 + B는 30 |
- | 첫 번째 피연산자에서 두 번째 피연산자 | 를 뺍니다 A - B는 -10 |
* | 두 피연산자를 곱합니다 | A * B는 200 |
/ | 분자를 분모로 나누면 | B / A는 2 |
% | 모듈로 연산자, 정수 나누기 후 나머지 | B % A는 0 |
++ | 증분을 얻습니다. 연산자, 정수 값을 1 | A++ 증가시키면 11 |
-- | 감소 연산자, 정수 값을 1 | A만큼 감소-- 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이라고 가정하면,
Operator | Description | Example |
---|---|---|
== | 값이 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이라고 가정하면 다음과 같습니다.
Operator | Description | Example |
---|---|---|
&& | 을 논리 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 - 条件为真
비트별 연산자
비트별 연산 문자 비트에 따라 작업을 수행하고 비트 단위로 작업을 수행합니다. &, | 및 ^의 실제 값은 다음과 같습니다.
p | q | p & q | p ^ q | |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
1 | 0 | 1 | 1 | |
1 | 1 | 1 | 0 | |
0 | 0 | 1 | 1 |
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이라고 가정하면 다음과 같습니다.
Description | Instance | |
---|---|---|
두 피연산자 모두에 존재하는 경우 동시에 이진 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 |
Operator | Description | Example |
---|---|---|
= | 간단한 할당 연산자, 오른쪽 피연산자의 값을 왼쪽 피연산자에 할당합니다 | 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 및 ?가 포함됩니다.
Description | Instance | |
---|---|---|
변수의 크기를 반환합니다. | sizeof(a)는 4를 반환합니다. 여기서 a는 정수입니다. | |
변수의 주소를 반환합니다. | &a;는 변수의 실제 주소를 제공합니다. | |
은 변수를 가리킵니다. | *a; 변수를 가리킵니다. | |
조건식 | 조건이 true이면 값은 X이고, 그렇지 않으면 값은 Y |
카테고리 | 연산자 | 연관성 |
---|---|---|
접미사 | () [] -> 일달러 | + - ! + - - (유형)* & sizeof |
곱셈과 나눗셈 | * / % | |
덧셈과 뺄셈 | + - | |
Shift | << >> | |
관계 | <= >= | 왼쪽에서 오른쪽으로 |
잠깐만요 | == != | 왼쪽에서 오른쪽으로 |
비트 AND AND | & | 왼쪽에서 오른쪽으로 |
비트 XOR XOR | ^ | 왼쪽에서 오른쪽으로 |
비트와이즈 OR | | | 왼쪽에서 오른쪽으로 |
논리 AND AND | && | 왼쪽에서 오른쪽으로 |
논리 OR OR | || | 왼쪽에서 오른쪽으로 |
조건 | ? : | 오른쪽에서 왼쪽으로 |
할당 | = += -= *= /= %=>>= <<= &= ^= |= | 오른쪽에서 왼쪽으로 |
comma | , | from left to right |
Example | C 언어에서 연산자의 우선순위를 이해하려면 다음 예를 보세요. |