4.1.5 算术类型转换结果
由于不同的类型有不同的目的、特性和局限性,将一个类型转换为另一类型通常要处理这些差异,通常,一个类型转换后的值取决于目标类型的特性。
4.1.5.1 _Bool类型转换
任何标量类型可被转换为_Bool, 结果为0i.e. 当标量值为o时,使用false; 当标量值为1时或非0时,使用true; 因为一个null指针比喻为0,所以转换为_Bool后,其值为false.
4.1.5.2 无符号整型转换
当整型值在新的无符号类型范围内时,它的值会被保护,换句话说,如果它们在0和Utype_Max之前,Utype_MAX为无符号类型的最大取值。
在无符号类型取值范围之外的值,它们的值将会多次加上或减去Utype_MAX + 1,直到其值在新类型的取值范围之内,下面的例子描述了把一个负数赋值给无符号整型:
#include <limits.h> // Defines the macros USHRT_MAX, UINT_MAX, etc.
unsigned short n = 1000; // The value 1000 is within the range of unsigned
// short;
n = -1; // the value -1 must be converted.
将有符号数-1赋值给一个无符号类型的变量,程序隐式地加上了USHRT_MAX + 1直到其结果在新类型的取值范围内,因为-1 + (USHRT_MAX + 1) = USHRT_MAX, 上例中,n的最终结果为USHRT_MAX;
对正整数而言,会减去(Utype_MAX + 1)使其值在新类型的取值范围之内,这与除以(Utype_MAX + 1)效果相同,如下例所描述:
#include <limits.h> // Defines the macros USHRT_MAX, UINT_MAX, etc.
unsigned short n = 0;
n = 0xFEDCBA; // The value is beyond the range of unsigned
// short.
如果unsigned short为16位的宽度,那么它的最大值为USHRT_MAX,其十六进制为FFFF,当值FEDCBA被转换为unsigned short时,如果与它除以十六进制10000(即USHRT_MAX + 1)的余数相等,通常小于或等于FFFF,在此例中,n的值最终被赋于DCBA。
将一个浮点型实数转换为无符号或有符号整数类型,编译器将丢弃分数部分,如果整数部分的值在新类型的取值范围外,结果将会转换为无符号类型,例如:
double x = 2.9;
unsigned long n = x; // The fractional part of x is simply lost.
unsigned long m = round(x); // If x is non-negative, this has the
// same effect as m = x + 0.5;
本例中初始化变量n时,x的值由double转换为unsigned long,并丢弃分数部分0.9.整数部分的 2将被赋值给n, 在初始化m时,使用C99标准中的round()函数,计算与x最接近的整型值,并返回一个double类型的值,小数部分的0.3在赋值给unsigned long类型的m时会被丢弃。
当一个复数转换为无符整数类型时,虚数部分首先会被丢弃,转换后的结果值为浮点型,例如:
#include <limits.h> // Defines macros such as UINT_MAX.
#include <complex.h> // Defines macros such as the imaginary
// constant I.
unsigned int n = 0;
float _Complex z = -1.7 + 2.0 * I;
n = z; // In this case, the effect is the same as
// n = -1;
// The resulting value of n is UINT_MAX.
变量z的虚数部分被丢弃,留下实数部分的浮点值-1.7, 然后浮点型的小数部分也被丢弃,留下的整型值为-1,它通过加上UINT_MAXT + 1 转换为unsigned int类型,因此,最后n被赋值为UINT_MAX。
分享到:
相关推荐
### C语言核心技术(C in a Nutshell) #### 知识点概述 《C语言核心技术》是一本由C语言专家Peter Prinz与Tony Crawford合作撰写的权威性书籍,它旨在为C语言程序员提供全面且深入的核心知识和技术指导。本书不仅...
### C语言核心技术(英文文字版) #### 书籍概述 《C语言核心技术》是一本由 Tony Crawford 和 Peter Rinz 合著的经典技术书籍,由著名的 O'Reilly 出版社出版。该书首次发布于2005年12月,全书共计618页,ISBN号...
《C语言技术手册》是一本全面且深入探讨C语言编程的资源,旨在帮助开发者和学习者迅速查询和理解C语言的各种函数及语法特性。CHM(Compiled Help Manual)格式是微软开发的帮助文档格式,通常包含丰富的索引、搜索...
### C语言核心技术(C: In a Nutshell) #### 核心知识点概览 《C语言核心技术》这本书由Tony Crawford和Peter Prinz等作者编写,由O'Reilly出版社于2005年12月出版。全书共有618页,涵盖了C语言的所有核心概念和...
### C语言核心技术——《C in a Nutshell》 #### 一、书籍简介 《C in a Nutshell》是由Tony Rawford和Peter Rinz共同编写的关于C语言的权威指南,出版社为O'Reilly,出版日期为2005年12月,ISBN编号为0-596-00697...
《C语言核心技术》不仅适合C语言初学者快速入门,也适合有经验的程序员作为日常工作的参考手册。该书内容丰富,结构清晰,通过大量实例加深读者对C语言的理解和掌握,是C语言学习者和专业程序员的必备书籍之一。 ...
·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。 ·给出了几个指导章节用于帮助新手入门。 ·为php、perl和c语言提供了应用程序编程接口(api)。 ·在每章的api开头部分提供了简要的指南。 ...
《C语言核心技术》不仅适合初学者作为C语言学习的快速入门指南,也适合有经验的程序员作为日常工作的实用参考手册。书中深入浅出地讲解了C语言的各个方面,辅以丰富的示例代码,使读者能够在实践中加深理解和记忆。...
### C核心技术手册知识点总结 #### 一、C语言的基础语法 **1.1 C的特征** C语言是一种过程式编程语言,由Dennis Ritchie于1970年代初在贝尔实验室开发,最初是为了实现UNIX操作系统及其应用程序能够尽可能地与...
根据提供的信息,《LINUX内核技术手册2.pdf》是一本专注于Linux内核配置、构建及安装的专业技术书籍。以下是对该书所涉及的关键知识点的详细总结: ### 一、书籍基本信息 - **书名**: Linux内核技术手册 - **作者*...
02H3 C VEPC3200核心网故障处理手册pdf 03H3CBBU3100系列基带处理单元故障处理手册,p 04H3 C VEPC3200产品开局自检手册pdf 05H3 C VMEGW3200技术白皮书pdf 06移动通信技术概述pdf 07H3CEPC3108核心网特性手册(E2123)...
《云打印C-Lodop技术手册》是一本详细介绍如何利用C-Lodop进行云端打印操作的技术文档。C-Lodop,全称为Cloud Lodop,是一款高效便捷的云打印解决方案,尤其适用于小票、箱贴、财务单等各类文档的远程打印需求。其...
综上所述,《C语言核心技术》这本书不仅是一本C语言的入门指南,还是一本详尽的参考手册。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过系统地学习这些内容,读者可以更高效地使用C语言进行编程,并解决...
### S3C2416核心板开发板硬件...综上所述,S3C2416核心板及其开发板为各类嵌入式系统设计提供了强大的硬件基础,其详细的硬件手册则为开发者提供了全面的技术指导和法律提示,是进行相关项目开发不可或缺的参考资料。