🧼C, C++/기초및 입문

C언어 기초 #3 if문과 연산자

Mawile 2021. 1. 13.
728x90

c계열언어 강좌 총정리

 

C계열언어 강좌 총정리

{[ C문법 기초 ]} 자료형 #1 배열과 함수 #2 연산자 #3 구조체와 공용체 #4 (*) 매크로와 열거형 #5 다양한 키워드 #6 (*) 비트필드 #7 포인터 #8 (**) 전처리문 #9 (추후에 내용추가..) {[ C++문법 기초 ]} 표준

mawile.tistory.com


개발환경 >> Visual Studio Code

언어 >> C17

운영체제 >> Windows10


안녕하세요!

이번에는 c언어에서 없어서는 안될 연산자에 대해서 포스팅 해보도록 하겠습니다

 


{[ sizeof() ]}

sizeof()연산자는 괄호안의 자료형의 실제 데이터상의 크기를 알수있습니다.

다음과 같이 사용이 가능합니다.

#include <stdio.h>

int main(){
    printf("%d %d %d %d %d %d", sizeof(int), sizeof(char), sizeof(float), sizeof(double), sizeof(long), sizeof(short));
}

결과값

보시다시피 각 자료형이 차지하는 바이트크기를 알수가있습니다.

실제 데이터상에서 차지하는 크기이기도하죠!

이와 관련된 비트에 대한 개념은 "C언어 비트필드"강좌에서 자세하게 다루겠습니다.

 

{[ +-%/* ]}

다음은 더하기 빼기 나누기 곱하기 연산자입니다.

사용방법은 다음과 같습니다!!!

#include <stdio.h>

int main(){
    int a = 9, b = 4;
    //9 + 4, 9 - 4, 9 * 4, 9 / 4, 9 % 4
    printf("%d %d %d %d %d", a + b, a - b, a * b, a / b, a % b);
}

결과값

여기서 '/' '%'기호가 비슷합니다.

정확히 '/'연산자는 두수를 나누고 나온 몫을 뜻하구요,

'%'연사자는 두수를 나누고 나온 나머지를 뜻합니다!

 

{[ == = != > < <= >= ]}

다음은 관계연산자입니다!!

사용방법은 다음과같습니다!

#include <stdio.h>

int main(){
    int a = 9, b = 4, c = 9, d = 0;
    d = b; //b의 값을 d에 대입
    printf("%d %d %d %d %d", a == c, a != c, a == b, a < b, c >= b);
}

결과값

결과값은 다음과 같습니다.

먼저 1은 참이구요, 0은 거짓입니다.

보겠습니다

"a == c"는 참이기때문에 1입니다. a와 c의값모두 9이기때문이죠~

"a != c"는 거짓입니다. 둘은 같습니다 이뜻은 두값이 다르냐? 이렇게 묻고있습니다. 두값은 같기때문에 거짓.

"a == b"는 위와 같고,

"a < b"는 b의 값이 a보다 크냐? 묻는건데 a가 더크니까 거짓

"c >= b"는 c의값이 b의값보다 크거나 같냐? 묻는거니까 참!

 

{[ << >> ~ ]}

다음은 비트연산자입니다!

먼저 사용방법을 알려드릴게요!!

#include <stdio.h>

int main(){
    int a = 7, b = 5;
    printf("%d %d %d", a >> 4, b << 3, a^2);
}

결과값

일단 이러한 결과값이 나오는 이유를 하나하나 살펴보기위해서

계산기를 꺼내고 프로그래머용으로 바꿉니다!

여기서 a의값인 7을 넣으면 2진수로는 이렇게나옵니다!

111이네요~!

근데 이값을 ">>"오른쪽으로 4번 시프트하면 111은 다 사라지겠죠??

왜냐하면 111을 오른쪽으로옮기면 수는 0이상이기때문에 1은 다사라질거고 0밖에안남겠죠?

반대로 b의값인 5는 2진수로 101입니다~!

"<<"오른쪽으로 101을 3번옮기면??

 

와우 printf의 두번째 값 40과 일치하네요?!!!

 

그럼 ^연산자는 뭘까요?

a의값인 7와 2사이에 ^를 넣었더니 5가되었습니다!

이유를 알려드릴게요

7은 2진수로 111이구요

2는 10입니다 ^는 여기서 자릿수마다 1이나 0이 일치하면 바꾸는겁니다!!

 111

  10

이렇게하면 두번째자리인 1이 일치하니까 0으로바꾸면 101이되겠죠?

 

2진수 101을 10진수로 바꾸면 5입니다!!(짜잔~)

 

{[ && || ?: ]}

다음은 논리연산자와 삼항연산자입니다!

사용방법알려드릴게요!!

#include <stdio.h>

int main(){
    int a = 7, b = 5;
    printf("%d %d %d %d", a == 7 && b == 5, a == 8 || b == 5, a != 7 || b != 5, a == 5 ? 100 : 200);
}

결과값

먼저 "a == 7 && b == 5"의 뜻은 a가 7인 동시에 b가 5면 참! 이라는뜻인데

맞죠? 그러니까 1이구요~

"a == 8 || b == 5"a가 8이거나 또는 b가 5이면 참! 이라는 뜻이니까, a가 8이 아니더라도 b가 5이니까 참!!

"a != 7 || b!= 5"a가 7이 아니거나 또는 b가 5가아니면 참! 인데 둘다 맞는말입니다.. 그래서 거짓...ㅠㅠ

"a == 5 ? 100 : 200" a가 5야? 그러면 100을 주고 5가아니라면 200을 줘 라는 뜻입니다.

보시다시피 a는 7이기때문에 5가 아닙니다. 따라서 200!!

 

 

 

 


 

 

혹시 추가로 알려주셨으면 하는 부분있다면 댓글로 알려주세요!!

다음강좌는 구조체와 공용체 입니다!!

그럼 안녕!

728x90

댓글