C캐스트
강제란 변수를 한 유형에서 다른 데이터 유형으로 변환하는 것입니다. 예를 들어, 간단한 정수에 긴 값을 저장하려면 긴 값을 int로 변환해야 합니다. 아래와 같이 cast 연산자를 사용하여 값을 한 유형에서 다른 유형으로 명시적으로 변환할 수 있습니다.
(type_name) expression
cast 연산자를 사용하여 정수 변수를 변환하는 다음 예를 참조하세요. 다른 정수 변수로 나누어 부동 소수점을 얻습니다. number:
#include <stdio.h>main(){ int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 나옵니다.
Value of mean : 3.400000
여기서 주목해야 할 점은 캐스트 연산자가 나누기보다 우선순위가 높다는 점입니다. 따라서 sum 값이 먼저 변환됩니다. double을 입력한 다음 개수로 나누어 결과적으로 double 유형의 값이 생성됩니다.
유형 변환은 암시적으로 수행되거나 컴파일러에 의해 자동으로 수행되거나 cast 연산자를 사용하여 명시적으로 지정될 수 있습니다. 프로그래밍할 때 유형 변환이 필요할 때마다 캐스트 연산자를 사용하는 것이 좋은 프로그래밍 습관입니다.
정수 승격
정수 승격은 int 또는 unsigned int보다 작은 정수 유형을 int 또는 unsigned int로 변환하는 프로세스를 의미합니다. int에 문자를 추가하는 아래 예를 참조하세요.
#include <stdio.h>main(){ int i = 17; char c = 'c'; /* ascii 值是 99 */ int sum; sum = i + c; printf("Value of sum : %d\n", sum );}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Value of sum : 116
여기서 sum의 값은 116입니다. 왜냐하면 컴파일러가 정수 Boost를 사용하기 때문입니다. 실제 덧셈 연산을 수행하여 'c' 값을 해당 ASCII 값으로 변환합니다.
자주 사용되는 산술 변환
자주 사용되는 산술 변환암시적으로 값을 동일한 유형으로 강제합니다. 컴파일러는 먼저 정수 승격을 수행하고 피연산자 유형이 다른 경우 다음 계층 구조에서 발생하는 최상위 유형으로 변환됩니다.
대입 연산자, 논리 연산자 && 및 |에는 일반적인 산술 변환이 적용되지 않습니다. |. 이 개념을 이해하기 위해 다음 예를 살펴보겠습니다.
#include <stdio.h>main(){ int i = 17; char c = 'c'; /* ascii 值是 99 */ float sum; sum = i + c; printf("Value of sum : %f\n", sum );}
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Value of sum : 116.000000
여기서 c는 먼저 정수로 변환되지만 최종 값은 Double 유형이므로 , 따라서 일반적인 산술 변환이 적용됩니다. 컴파일러는 i와 c를 부동 소수점 유형으로 변환하고 이를 추가하여 부동 소수점 숫자를 얻습니다.