2021.06.26 - [임베디드/C언어] - [비와이][C언어] 연산자에 대해서 알아보자 - 1
어제에 이어서 연산자에 대해서 포스팅 하겠습니다.
구 분 | 연산자 종류 |
대입 연산자 | = |
산술 연산자 | +, -, *, /, %, ++, -- |
관계 연산자 | <, >, <=, >=, ==, != |
논리 연산자 | &&, ||, ! |
할당 연산자 | +=, -=, *=, /=, %=, ... |
삼항 연산자 | ? |
비트 연산자 | &, |, ^, ~, <<, >> |
에서 할당, 삼항, 비트 연산자에 대해서 알아보겠습니다.
할당 연산자
할당 연산자의 모양을 보시면, 산술 연산자와 '='가 결합된 형태인 것이 확인됩니다.
즉, 형태는
위와 같습니다. A와 B를 산술연산을 하고서, 그 결과를 A에다가 다시 대입하여 저장하는 것입니다.
간단한 코드로 테스트를 해보면서 확인해보시면 아래와 같이 해보시면 됩니다. 하나하나 코드를 단계씩 따라가시면 이해가 되실거에요.
#include <stdio.h>
int main(void)
{
int a = 3;
// a의 현재값은 3
printf("a의 결과값은 %d\n", a);
a += 2; // a = a + 2;
// a의 현재값은 5
printf("a +=2 의 결과값은 %d\n", a);
a -= 3; // a = a - 3;
// a의 현재값은 2
printf("a -=3 의 결과값은 %d\n", a);
a *= 5; // a = a * 5;
// a의 현재값은 10
printf("a *=5 의 결과값은 %d\n", a);
a /= 3; // a = a / 3;
// a의 현재값은 3
printf("a /=3 읜 결과값은 %d\n", a);
return 0;
}
실행결과
삼항 연산자
삼항 연산자는 조건을 따져서 그 조건에 따라 결과값을 다르게 출력하는 연산자 입니다.
일반적으로
(조건) ? A : B
와 같은 형태로 사용하게 됩니다.
조건은 a > 0 와 같은 조건식을 말합니다.
해당되는 조건이 만약 참(True)라면, 결과값은 A가 되고,
해당되는 조건이 거짓(False)라면, 결과값은 B가 됩니다.
예시를 통해서 살펴보시죠.
#include <stdio.h>
int main(void)
{
int a = 3;
int b = 0;
b = a > 5 ? 1 : 0;
// a > 5는 거짓이므로, b의 결과값은 0
printf("b의 결과값은 %d\n", b);
printf("a는 %s이다\n", a % 2 ? "홀수" : "짝수");
// 문자열을 출력하도록 사용도 가능하다.
// 조건의 결과가 0이 아닌 모든 값은 참으로 간주된다.
// a % 2 는 a를 2로 나눈 나머지 이므로 3을 2로 나눈 나머지는 1이다.
return 0;
}
실행 결과
비트 연산자
비트 연산자는 특히 임베디드 개발자라면 중요합니다. 레지스터 설정을 할 때 비트 연산을 많이 하게 됩니다.
연산자 | 이름 | 의미 |
& | AND | 두 수의 논리 곱 |
| | OR | 두 수의 논리 합 |
^ | XOR(Exclusive OR) | 두 수의 베타적 논리 합 |
~ | NOT | 비트 단위의 논리 부정 |
<< | Left Shift | 왼쪽으로 쉬프트 비트 이동 |
>> | Right Shift | 오른쪽으로 쉬프트 비트 이동 |
AND
1111 0011(2) & 0011 0001(2) = 0011 0001(2) 가 됩니다.
계산하는 방법은 각각의 동일 비트의 값이 "모두 1이면 결과는 1이고, 그 외는 모두 0"이 됩니다.
OR
1111 0011(2) | 0011 0001(2) = 1111 1011(2) 가 됩니다.
계산하는 방법은 각각의 동일 비트의 값이 "둘 중 하나라도 1이면 결과는 1이고, 모두 0이면 결과는 0"이 됩니다.
XOR (Exclusive OR)
1111 0011(2) ^ 0011 0001(2) = 0011 0101(2) 가 됩니다.
계산하는 방법은 각각의 동일 비트의 값이 "서로 같으면 1, 서로 다르면 0"이 됩니다.
NOT
~0011 1001(2) = 1100 0110(2) 가 됩니다.
즉, 각 비트별로 0이면 1, 1이면 0으로 뒤집어 주면 됩니다.
Shift
0000 0011(2) << 4 = 0011 0000(2) 가 됩니다.
0번 비트의 값이 4번 비트까지 옮겨가게 됩니다.
1번 비트는 5번비트로 옮겨지는 것이구요.
즉, 원래의 값에서 모든 값은 왼쪽으로 << '숫자' 숫자 만큼 옮겨주면 됩니다.
>> 의 경우응 오른쪽으로 옮겨주시면 됩니다.
1100 0000(2) >> 5 = 0000 0110(2) 가 됩니다.
7번비트는 2번비트 자리로,
6번비트는 1번비트 자리로,
5번비트는 0번비트 자리로 보내주면 됩니다.
나머지 값은 0으로 채워집니다.
즉, 원래의 값에서 모든 값을 오른쪽으로 >> '숫자'의 숫자 만큼 옮겨주면 됩니다.
비트 연산을 잘 활용할 줄 아시면, 특히 레지스터 값이나, flag 처리를 할 때 유용하게 쓰실 수 있습니다.
꼭 숙지해두시길 추천드립니다.
'IT > C언어' 카테고리의 다른 글
[비와이][C언어] 연산자에 대해서 알아보자 - 1 (0) | 2021.06.26 |
---|---|
[비와이][C언어] 03 - 변수와 상수 (0) | 2021.06.24 |
[비와이][C언어] 02 - printf와 형식 지정자 (0) | 2021.06.22 |
01 - 데이터 자료형에 대해서 알아보자 ( 양수, 음수, 1의 보수 ) (0) | 2021.06.20 |
00 - Visual Studio Community 2019 설치, Hello World 출력 (0) | 2021.06.11 |
댓글