การหล่อแบบ Objective-C
การคัดเลือกประเภทเป็นวิธีการแปลงตัวแปรจากประเภทข้อมูลหนึ่งไปเป็นข้อมูลประเภทอื่น ตัวอย่างเช่นหากคุณต้องการเก็บค่า long เป็นจำนวนเต็มอย่างง่ายคุณสามารถพิมพ์ cast long เป็น int ได้ คุณสามารถแปลงค่าจากประเภทหนึ่งไปเป็นอีกประเภทหนึ่งได้อย่างชัดเจนโดยใช้ไฟล์cast operator ดังต่อไปนี้ -
(type_name) expression
ใน Objective-C โดยทั่วไปเราใช้ CGFloat ในการดำเนินการจุดลอยตัวซึ่งได้มาจากประเภทพื้นฐานของการลอยตัวในกรณีของ 32 บิตและสองเท่าในกรณีของ 64 บิต ลองพิจารณาตัวอย่างต่อไปนี้ที่ตัวดำเนินการ cast ทำให้การหารตัวแปรจำนวนเต็มหนึ่งตัวโดยอีกตัวแปรหนึ่งถูกดำเนินการเป็นการดำเนินการแบบทศนิยม -
#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
ที่นี่ค่าของ sum จะมาเป็น 116 เนื่องจากคอมไพเลอร์กำลังทำการส่งเสริมจำนวนเต็มและแปลงค่าของ 'c' เป็น ascii ก่อนที่จะดำเนินการเพิ่มจริง
การแปลงเลขคณิตปกติ
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 ตัวแรกถูกแปลงเป็นจำนวนเต็ม แต่เนื่องจากค่าสุดท้ายเป็นจำนวนทศนิยมดังนั้นการแปลงเลขคณิตตามปกติจึงใช้และคอมไพเลอร์จะแปลง i และ c ให้เป็นลอยและเพิ่มเข้าด้วยกันเพื่อให้ได้ผลลัพธ์ที่เป็นทศนิยม