프로그래밍 언어/C

C 연산자 총정리 -2 (비교, 논리, 비트, 기타 등)

순정법사 2023.08.16

5. 비교 연산자

a. 비교 연산자란?

🌟 피연산자 사이의 상대적인 크기를 판단하는 연산자

 

b. 비교 연산의 특징

  • 두 개의 피연산자를 가지는 이항 연산자
  • 피연산자들의 결합 방향 : ➡

 

c. 비교 연산자의 종류

증감 연산자 설명
== 왼쪽의 값과 오른쪽 값이 같으면 1
!= 왼쪽 값과 오른쪽 값이 같지 않으면 1
> 왼쪽 값이 오른쪽 값보다 크면 1
>= 왼쪽 값이 오른쪽 값보다 크거나 같으면 1
< 왼쪽 값이 오른쪽 값보다 작으면 1
<= 왼쪽 값이 오른쪽 값보다 작거나 같으면 1

 

💙 INFO

컴퓨터에서 참(true)은 보통 1로 표현되고, 거짓(false)은 0으로 표현되지만
C언어에서는 참(true)은 0이 아닌 모든것, 거짓(false)은 동일하게 0 

 

d. 비교 연산자의 예시

🤓 예제

int num01 = 3;
int num02 = 7;  


printf("== 연산자에 의한 결괏값은 %d입니다.\n", num01 == num02);
printf("<= 연산자에 의한 결괏값은 %d입니다.\n", num01 <= num02);

✨ 실행결과

== 연산자에 의한 결괏값은 0입니다.
<= 연산자에 의한 결괏값은 1입니다.

 

 

6. 논리 연산자

a. 논리 연산자란?

🌟 주어진 논리식을 판단하여, 참(true)과 거짓(false)을 결정하는 연산자

 

b. 논리 연산의 특징

1) AND / OR 연산자

  • 두 개의 피연산자를 가지는 이항 연산자
  • 피연산자들의 결합 방향 : ➡

 

2) NOT 연산자

  • 단항 연산자
  • 피연산자들의 결합 방향 : 👈 

 

c. 논리 연산자의 종류

논리 연산자  설명
&& 논리식이 모두 참이면 1을 반환함. (논리 AND 연산)
|| 논리식 중에서 하나라도 참이면 1을 반환함. (논리 OR 연산)
! 논리식의 결과가 참이면 0을, 거짓이면 1을 반환함. (논리 NOT 연산)

 

d. 논리 연산자의 진리표

A B A && B A || B !A
1 (true) 1 (true) 1 (true) 1 (true) 0 (false)
1 (true) 0 (false) 0 (false) 1 (true) 0 (false)
0 (false) 1 (true) 0 (false) 1 (true) 1 (true)
0 (false) 0 (false) 0 (false) 0 (false) 1 (true)

 

e. 논리 연산자의 예시

🤓 예제

int num01 = 3;
int num02 = -7;

int result01, result02;  
 
result01 = (num01 > 0) && (num01 < 5);
result02 = (num02 < 0) || (num02 > 10);  


printf("&& 연산자에 의한 결괏값은 %d입니다.\n", result01);
printf("|| 연산자에 의한 결괏값은 %d입니다.\n", result02);
printf(" ! 연산자에 의한 결괏값은 %d입니다.\n", !result02);

✨ 실행결과

&& 연산자에 의한 결괏값은 1입니다.
|| 연산자에 의한 결괏값은 1입니다.
 ! 연산자에 의한 결괏값은 0입니다.

 

 

7. 비트 연산자

아래에 자세하게 정리해놓음

 

[C언어 참조] 비트 단위 연산

더보기 연산자 총정리 -2 (비교, 논리, 비트, 기타 등) 5. 비교 연산자 a. 비교 연산자란? 🌟 피연산자 사이의 상대적인 크기를 판단하는 연산자 b. 비교 연산의 특징 두 개의 피연산자를 가지는 이

monamu.tistory.com

 

 

8. 삼항 연산자

a. 삼항 연산자란?

🌟 조건식의 참 거짓을 따져 반환값(값, 수식, 함수 호출 등)을 달리 할 수 있는 연산자

 

조건식의 값이 참이면 반환값1, 거짓이면 반환값 2를 반환함

짧은 if / else 문 대신에 사용할 수 있으며, 코드를 간결하게 작성할 수 있도록 도와줌

 

📘 문법

조건식 ? 반환값1 : 반환값2

 

b. 삼항 연산의 특징

  • 피연산자를 세개나 가짐
  • if / else  문 대신 사용 가능

 

c. 삼항 연산의 예시

🤓 예제

int num01 = 15;
int num02 = 8;
int result;  

result = (num01 > num02) ? num01 : num02;

printf("둘 중에 더 큰수는 %d입니다.\n", result);

✨ 실행결과

둘 중에 더 큰수는 15입니다.

 

 

9. 쉼표 연산자

a. 쉼표 연산자란?

🌟 어떠한 연산을 수행하는 것이 아니라 두 연산식을 하나로 나타내거나, 둘 이상의 인수를 함수로 전달하고자 할 때 사용

 

b. 쉼표 연산의 예시

🤓 예제

int num01 = 15, num02 = 8; //동시 선언

printf("첫 번째 수는 %d이고, 두 번째 수는 %d입니다.\n", num01, num02); //동시 전달

✨ 실행결과

첫 번째 수는 15이고, 두 번째 수는 8입니다.

 

 

10. sizeof 연산자

a. sizeof 연산자란?

🌟 피연산자 형식의 개체를 저장하기 위해 필요한 스토리지 공간(바이트)을 제공하고 알려주는 역할

 

사용자의 컴퓨터 환경에 따라 타입에 할당되는 메모리의 크기가 달라질 수 있어서 이 연산자를 사용하면 컴퓨터 환경에서의 타입 크기를 알아볼 수 있음

 

📘 문법

sizeof 표현식
sizeof (자료형/표현식)

 

b. sizeof 연산자의 예시

🤓 예제

char    a;
int     b;
double  d; 

puts("\n C언어 sizeof 연산자 \n");

printf(" a = %d byte \n", sizeof(a));
printf(" b = %d byte \n", sizeof(b));
printf(" d = %d byte \n", sizeof d);

puts("\n 시스템이 자동으로 인식하는 크기 ");
printf(" #     = %d byte \n", sizeof('#'));
printf(" 50    = %d byte \n", sizeof(50));
printf(" 4.153 = %d byte \n", sizeof(4.153));
printf(" kim   = %d byte \n", sizeof("kim"));

✨ 실행결과

C언어 sizeof 연산자

a = 1 byte
b = 4 byte
d = 8 byte


시스템이 자동으로 인식하는 크기

# = 4 byte;          //컴파일러에 따라 다르지만 내부적으로 4byte에 저장되었음
50 = 4 byte;         //정수형 리터럴 상수는 4byte에 저장되었음
4.153 = 8 byte;
kim = 4 byte;          //문자열 끝을 나타내는 null을 사용하기 위해 1byte 더 사용

 

 

11. 포인터 연산자

a. 포인터 연산자 (*)

🌟 포인터 변수 주소 값에 있는 데이터

 

++ 예전에 변수를 공부하면서 배웠듯, 변수는 데이터가 저장된 주소와, 데이터의 길이나 형태에 관한 정보도 같이 기억해야 한다!!

 

b. 주소 연산자 (&) = 번지 연산자 = 참조 연산자

🌟 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환

 

'&'기호는 앰퍼샌드(ampersand)라고 읽음

 

c. 포인터 연산자의 예시

1) 일반적 포인터 연산자의 값 참조

 

🤓 예제

int *p;	//p는 int 자료형을 가진 포인터 변수이다
int a = 2;  //a는 int 자료형을 가진 변수이고, 값은 2이다

p = &a; // p는 a의 주소값을 참조한다

printf("%d\n", p);  //부호 있는 10진 정수 서식으로 p를 출력한다
printf("%d\n", *p); //부호 있는 10진 정수 서식으로 p의 데이터를 출력한다

✨ 실행결과

62255352 // 변수의 주소

2  // 값 출력

 

2) 포인터 변수가 가리키는 변수 값 참조

 

🤓 예제

int *p;

*p = 4;

printf("%d\n", p);
printf("%d\n", *p);

✨ 실행결과

14547184 // 변수의 주소

4  // 값 출력

 

💥 WARNING

*이 붙은 변수는 무조건 데이터를 받아와야 하는데,
위의 예시에서 이미 *p라고 포인터 변수라고 선언한 변수에 p = 4라고 해버리면
주소값을 가르켜야 하는 곳에 데이터를 대입해버려서 치명적 오류가 생김


비슷한 경우로 *p = &b를 하는 경우에도
p의 주소값은 변하지 않고, 데이터도 엉뚱한 값으로 출력됨

 

 

 


출처 :  https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ahalinux&logNo=220878857643

 

C언어 sizeof연산자

C언어 공부할 때요. 처음에는 자료형이 그렇게 중요할까? 이런 생각이 들지요. 그런데 포인터에서 한바탕 ...

blog.naver.com

https://studyingych.tistory.com/14

 

포인터 *연산자 , & 참조연산자 이해

포인터 * 연산자 * 는 산술 연산자에서는 곱셈을 의미하지만 포인터에서는 포인터 변수 주소 값에 있는 데이터를 말한다 123456789int main() { int *p; int a = 2; p = &a; printf("%d\n", p); // * 안 썼을 때 printf("

studyingych.tistory.com

http://www.tcpschool.com/c/c_operator_arithmetic

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com