C의 유형 캐스팅: 유형 변환, 암시적, 명시적(예제 포함)

C에서 타입 캐스팅이란 무엇입니까?

타입캐스팅은 한 데이터 유형을 다른 데이터 유형으로 변환하는 것입니다. C 언어에서는 데이터 변환 또는 유형 변환이라고도 합니다. 'C' 프로그래밍에 도입된 중요한 개념 중 하나입니다.

'C' 프로그래밍은 두 가지 유형의 형 변환 연산을 제공합니다.

  1. 암시 적 유형 캐스팅
  2. 명시적 유형 캐스팅

암시 적 유형 캐스팅

암시적 유형 캐스팅은 원래 의미를 잃지 않고 데이터 유형을 변환하는 것을 의미합니다. 이러한 유형의 유형 캐스팅은 데이터 유형을 변경하려는 경우 필수적입니다. 없이 내부에 저장된 값의 중요성을 변경합니다. 변수.

C에서 암시적 유형 변환은 값이 호환되는 데이터 유형으로 복사될 때 자동으로 발생합니다. 변환하는 동안 엄격한 유형 변환 규칙이 적용됩니다. 피연산자가 두 개의 다른 데이터 유형인 경우, 낮은 데이터 유형의 피연산자는 자동으로 높은 데이터 유형으로 변환됩니다. 이러한 유형의 유형 변환은 다음 예에서 볼 수 있습니다.

#include<stdio.h>
int main(){
	short a=10; //initializing variable of short data type
	int b; //declaring int variable
	b=a; //implicit type casting
	printf("%d\n",a);
	printf("%d\n",b);
}

출력:

10
10

암시 적 유형 캐스팅

  1. 주어진 예에서는 값이 10으로 초기화된 짧은 데이터 유형의 변수를 선언했습니다.
  2. 두 번째 줄에서는 int 데이터 유형의 변수를 선언했습니다.
  3. 세 번째 줄에서는 변수 s의 값을 변수 a에 할당했습니다. 세 번째 줄에서는 short 데이터 유형인 변수 s의 값이 int 데이터 유형인 변수 a에 복사되면서 암시적 유형 변환이 수행됩니다.

문자를 Int로 변환

ASCII로 디코딩된 문자를 정수와 함께 추가하는 예를 생각해 보세요.

#include <stdio.h>
main() {
   int  number = 1;
   char character = 'k'; /*ASCII value is 107 */
   int sum;
   sum = number + character;
   printf("Value of sum : %d\n", sum );
}

출력:

 Value of sum : 108

여기에서 컴파일러는 실제 덧셈 연산을 수행하기 전에 'k' 값을 ASCII로 변환하여 정수 승격을 수행했습니다.

산술 변환 계층

컴파일러는 먼저 문자를 정수로 승격합니다. 피연산자가 여전히 다른 데이터 유형을 가지고 있는 경우 다음 계층 차트에 나타나는 가장 높은 데이터 유형으로 변환됩니다.

암시 적 유형 캐스팅
산술 변환 계층

이 개념을 이해하기 위해 다음 예를 살펴보겠습니다.

#include <stdio.h>
main() {
   int  num = 13;
   char c = 'k'; /* ASCII value is 107 */
   float sum;
   sum = num + c;
   printf("sum = %f\n", sum );}

출력:

 sum = 120.000000

우선, c 변수는 정수로 변환되지만 컴파일러는 NUM 그리고 c "float"로 변환하고 이를 추가하여 'float' 결과를 생성합니다.

암시적 변환에 대한 중요 사항

  • 암시적 유형 변환을 표준 유형 변환이라고도 합니다. 암시적 유형 캐스팅에는 키워드나 특수 명령문이 필요하지 않습니다.
  • 더 작은 데이터 유형에서 더 큰 데이터 유형으로 변환하는 것을 다음과 같이 부릅니다. 유형 프로모션. 위의 예에서 s의 값이 정수형으로 승격되었다고도 말할 수 있습니다.
  • 암시적 유형 변환은 항상 호환되는 데이터 유형에서 발생합니다.

다음과 같이 서로 호환되지 않는 데이터 유형에 대해서는 암시적 유형 캐스팅을 수행할 수 없습니다.

  1. float를 int로 변환하면 분수 부분이 잘려 값의 의미가 손실됩니다.
  2. double을 float로 변환하면 숫자가 반올림됩니다.
  3. long int를 int로 변환하면 과도한 상위 비트가 삭제됩니다.

위의 모든 경우에 데이터 유형을 변환하면 값의 의미가 사라집니다. 일반적으로 값의 의미가 손실되면 컴파일러에서 경고합니다.

'C' 프로그래밍 명시적 유형 캐스팅인 또 다른 유형 캐스팅 방법을 제공합니다.

명시적 유형 캐스팅

암묵적 유형 변환에서 데이터 유형은 자동으로 변환됩니다. 강제로 유형 변환을 해야 할 수 있는 몇 가지 시나리오가 있습니다. int 데이터 유형으로 선언된 두 피연산자의 나누기를 저장하는 변수 div가 있다고 가정합니다.

 int result, var1=10, var2=3;
result=var1/var2;

이 경우, 변수 var1과 var2에서 수행된 나누기 후에 변수 "result"에 저장된 결과는 정수 형식이 됩니다. 이런 일이 발생할 때마다 변수 "result"에 저장된 값은 일반적으로 두 수의 나누기에서 얻어지는 분수 부분을 고려하지 않기 때문에 의미를 잃습니다.

이러한 상황에서 유형 변환을 강제하기 위해 명시적 유형 캐스팅을 사용합니다.

유형 캐스팅 연산자가 필요합니다. 유형 캐스팅 연산의 일반 구문은 다음과 같습니다.

(type-name) expression

여기

  • 유형 이름은 표준 'C' 언어 데이터 유형입니다.
  • 표현식은 상수, 변수 또는 실제 표현식일 수 있습니다.

명시적인 유형 캐스팅을 사용하여 C에서 유형 캐스팅하는 방법을 보여주는 프로그램을 작성해 보겠습니다.

#include<stdio.h>
int main()
{
	float a = 1.2;
	//int b  = a; //Compiler will throw an error for this
	int b = (int)a + 1;
	printf("Value of a is %f\n", a);
	printf("Value of b is %d\n",b);
	return 0;
}

출력:

Value of a is 1.200000
Value of b is 2

명시적 유형 캐스팅

  1. float 유형의 변수 'a'를 초기화했습니다.
  2. 다음으로 정수 데이터 유형의 또 다른 변수 'b'가 있습니다. 변수 'a'와 'b'는 데이터 유형이 다르기 때문에 'C'는 이러한 표현식의 사용을 허용하지 않으며 오류가 발생합니다. 'C'의 일부 버전에서는 표현식이 평가되지만 결과는 바람직하지 않습니다.
  3. 이러한 상황을 방지하기 위해 float 유형의 변수 'a'를 유형 변환했습니다. 명시적인 유형 캐스팅 방법을 사용하여 float를 데이터 유형 정수로 성공적으로 변환했습니다.
  4. 우리는 여전히 부동 소수점인 'a' 값을 인쇄했습니다.
  5. 타입 캐스팅 후 결과는 항상 정수 'b'입니다.

이러한 방식으로 C 프로그래밍에서 명시적인 유형 캐스팅을 구현할 수 있습니다.

요약

  • 타입캐스팅은 타입 변환이라고도 합니다.
  • 이는 하나의 데이터 유형을 다른 데이터 유형으로 변환하는 것을 의미합니다.
  • 작은 데이터 형식을 큰 데이터 형식으로 변환하는 것을 형식 승격이라고도 합니다.
  • C에는 암시적 유형 변환과 명시적 유형 변환이라는 두 가지 유형 변환이 있습니다.
  • 호환되는 데이터 유형이 발견되면 암묵적 유형 변환이 자동으로 수행됩니다.
  • 명시적 유형 변환에는 유형 변환 연산자가 필요합니다.

다양한 데이터 유형을 다룰 때 데이터 손실을 방지하기 위해 프로그래밍 연습을 위한 다음 규칙을 명심하세요.

  • 정수 유형은 부동 소수점 유형으로 변환되어야 합니다.
  • Float 유형은 double로 변환해야 합니다.
  • 문자 유형은 정수로 변환되어야 합니다.