Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
관리 메뉴

OnlyOne

Operator(비트연산자와 삼항연산자) 본문

Control Engineering/C Programming

Operator(비트연산자와 삼항연산자)

Taesan Kim 2024. 8. 10. 22:09

 

 

본 포스팅은 한동대학교 21학번 과학기술전문사관 후보생 최윤석 선배님의 C언어 교육자료로 제작되었음을 알려드립니다. 감사합니다.

Operator

비트 연산자와 삼항연산자를 살펴볼 것이다.

 

비트 연산자

& : 둘 다 1일 때만 1을 반환, 나머지는 모두 0

| : 둘 다 0일 때만 0을 반환, 나머지는 모두 1

^ : 둘이 다를 때만 1을 반환, 둘이 같을 때는 0

~ : 0이면 1로, 1이면, 0으로

 

비트 이동 연산자

비트 이동 연산자

b = a << 3은 무슨 의미일까? a를 이진법으로 표현했을 때, 그 값을 왼쪽으로 3칸 이동시키고, 이 과정에서 비워진 3칸을 0으로 채우는 연산이다. 이 과정으로 인해 b는 a의 값에 8을 곱한 값이 된다.

 

예상했겠지만, a >> 1은 a/2의 값과 같다. 맨 뒤에 1이건 0이건 2로 나누면 소수가 되므로, 무시한다.

 

 

Q. 왜 나누기나 곱하기를 사용하면 되는데 굳이 비트 이동 연산자를 사용할까?

-> 그 이유는 비트 이동 연산자가 CPU에서 더 빠르게 수행되어 최적화에 유리하고, 또한 프로그래머 입장에서도 의도가 명확하게 보이는 효과로 인해 프로그래밍 효율성이 증가하기 때문이다.

 

삼항 연산자

#include <stdio.h>

int main(){
	int a = 1;
    int c = a ? 100 : 200;
    printf("Value: %d\n", c);
}

a가 TRUE(0이 아닌 값)이므로, c의 값이 100이다. 만약에 a가 0이었다면, c의 값은 200이 되었을 것이다.

 

Example: 삼항 연산자를 이용한 최대/최소 찾기

#include <stdio.h>

int main() {
    int a, b, c, max, min;
    a = 1;
    b = 2;
    c = 3;

    max = (a > b) ? ((a > c) ? a : c) : (b > c) ? b : c;
    min = (a > b) ? ((b > c) ? c : b) : (a > c) ? c : a;

    printf("Min : %d\n", min);
    printf("Max : %d\n", max);
}

'Control Engineering > C Programming' 카테고리의 다른 글

Practice[Integral]  (0) 2024.09.04
Practice[Root Formula]  (0) 2024.09.04
구조체(Derived Type)  (0) 2024.09.04
오버플로우(Overflow)와 언더플로우(Underflow)  (0) 2024.08.10
C언어란  (1) 2024.08.10