Objective-C 유형 주조
유형 캐스팅은 한 데이터 유형에서 다른 데이터 유형으로 변수를 변환하는 방법입니다. 예를 들어, long 값을 간단한 정수에 저장하려면 cast long을 int로 입력 할 수 있습니다. 다음을 사용하여 한 유형에서 다른 유형으로 값을 명시 적으로 변환 할 수 있습니다.cast operator 다음과 같이-
(type_name) expression
Objective-C에서는 일반적으로 부동 소수점 연산을 수행하기 위해 CGFloat를 사용하는데, 이는 32 비트의 경우 기본 유형의 float, 64 비트의 경우 double에서 파생됩니다. 캐스트 연산자가 한 정수 변수를 다른 정수 변수로 나누면 부동 소수점 연산으로 수행되는 다음 예제를 고려하십시오.
#import <Foundation/Foundation.h>
int main() {
int sum = 17, count = 5;
CGFloat mean;
mean = (CGFloat) sum / count;
NSLog(@"Value of mean : %f\n", mean );
return 0;
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
2013-09-11 01:35:40.047 demo[20634] Value of mean : 3.400000
여기서 캐스트 연산자는 나누기보다 우선하므로 sum 먼저 유형으로 변환됩니다. double 마지막으로 두 배의 값을 산출하는 개수로 나뉩니다.
유형 변환은 컴파일러에 의해 자동으로 수행되는 암시 적이거나 다음을 사용하여 명시 적으로 지정 될 수 있습니다. cast operator. 유형 변환이 필요할 때마다 캐스트 연산자를 사용하는 것이 좋은 프로그래밍 관행으로 간주됩니다.
정수 승격
정수 승격은 정수 유형의 값이 "작은"값보다 int 또는 unsigned int 다음 중 하나로 변환됩니다. int 또는 unsigned int. int에 문자를 추가하는 예를 고려하십시오.
#import <Foundation/Foundation.h>
int main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
int sum;
sum = i + c;
NSLog(@"Value of sum : %d\n", sum );
return 0;
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
2013-09-11 01:38:28.492 demo[980] Value of sum : 116
여기서 컴파일러는 정수 승격을하고 실제 더하기 연산을 수행하기 전에 'c'의 값을 ascii로 변환하기 때문에 sum의 값은 116이됩니다.
일반적인 산술 변환
그만큼 usual arithmetic conversions공통 유형으로 값을 캐스트하기 위해 암시 적으로 수행됩니다. 컴파일러는 먼저 정수 승격을 수행 합니다. 피연산자가 여전히 다른 유형을 가지고 있으면 다음 계층 구조에서 가장 높은 유형으로 변환됩니다.
일반적인 산술 변환은 할당 연산자 나 논리 연산자 && 및 ||에 대해 수행되지 않습니다. 개념을 이해하기 위해 다음 예를 들어 보겠습니다.
#import <Foundation/Foundation.h>
int main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
CGFloat sum;
sum = i + c;
NSLog(@"Value of sum : %f\n", sum );
return 0;
}
위의 코드가 컴파일되고 실행되면 다음과 같은 결과가 생성됩니다.
2013-09-11 01:41:39.192 demo[15351] Value of sum : 116.000000
여기서 첫 번째 c는 정수로 변환되지만 최종 값은 float이기 때문에 일반적인 산술 변환이 적용되고 컴파일러는 i와 c를 float로 변환하고이를 추가하여 float 결과를 산출한다는 것을 이해하는 것은 간단합니다.