컴퓨터 프로그래밍/C

C언어 증감 연산자 / 캐스팅 연산자 / sizeof 연산자

나노콛 2019. 7. 18. 14:02

지난 편 문제 풀이

연산자의 우선순위를 먼저 파악하는 게 좋습니다.

 

 

 


증감 연산자

 

#include <stdio.h>

int main()
{
 int a = 10;
 int b = 20;

 printf("a = %d \n",a);  //10

 printf("a++ = %d \n",a++); //10 /사용 후 증가
                             a = 11
 printf("++b = %d \n",++b); //21 /증가 후 사용 b = 21

 printf("a = %d b = %d\n", a, b); //11 21

 return 0;
}

증감 연산자는
변수의 값이 1+ 혹은 1- 되는 연산자입니다.
변수의 값이 변경된다는 것에 중점을 둡시다.


캐스팅 연산자

 

#include <stdio.h>

int main()
{
 int a = 10;
 float b = 3.14;
 double c = 99.9;

 printf("a + b = %d\n",a + b); 
 printf("b + c = %c\n",b + c);

 printf("a + b = %d\n",a + (int)b);
 printf("b + c = %c\n",(char)(b + c));

 printf("b + c = %c\n",(char)b + (char)c);

 printf("a = %d b = %f c = %f\n",a ,b ,c);
 
 return 0;
}

캐스팅 연산자는 일시적 형(자료형) 변환을 시켜줍니다.

그래서 형이 다른 변수와의 연산을 할 때
캐스팅을 하지 않고 하면 원하지 않는 값이 뜨게 됩니다.

 

(char)(b + c) 계산에서
b와 c를 더한 후 103.04에 대한 아스키코드 값이 없기 때문에 소수점 자리는 버리고 103의 아스키코드값 g가 출력됩니다.

(char)b + (char)c 여기에서는
b의 값 3의 c의 값 99를 더한 102에 대한 아스키코드값 f 가 출력됩니다.

이런 형태의 특징을 확인하시기 바랍니다.


sizeof 연산자

 

#include <stdio.h>

int main()
{
 int a = 0;
 int b[5]; 

 printf("int : %d\n",sizeof(int));
 printf("char : %d\n",sizeof(char));
 printf("a : %d\n",sizeof(a));

 printf("b : %d\n",sizeof(b));

 return 0;
}

sizeof는 괄호가 붙어있지만 연산자입니다 
메모리에 할당된 크기를 구할 때 사용합니다.

int는 4바이트
char는 1바이트입니다
a는 int형 변수로서 4바이트 할당되어 있습니다.
b는 int형 5개의 공간이 만들어져 있습니다.


문제

#include <stdio.h>

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

 printf("%d\n",-(--a));
 printf("%d\n",b-(--c));
 printf("%d\n",a++ - b);
 printf("%d\n",a++ / ++b * --c);
 printf("%d\n",++c / b++ * --a);

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

 return 0;
}

 

#include <stdio.h>

int main()
{
 int num1=0;
 int num2=0;

 num1 = sizeof(num2);
 num2 = sizeof(char);

 printf("num1 = %d\n",num1++);
 printf("num2 = %d\n",num2--);
 printf("num1 = %d\n",num1 *= num2);
 
 num2 = --num1 && num2;
 
 printf("num2 = %d\n",num2);
 printf("size = %d\n",sizeof(num1) * 4);
 printf("True or False = %d\n",num1 > num2);
 printf("True or False = %d\n",num1 == !num2);
 printf("True or False = %d\n",num1 != num2 || num2);

 return 0;
}
728x90