`
javasogo
  • 浏览: 1822152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C核心技术手册(二十六)

 
阅读更多

4.1.3常用算术转换

常用的算术类型转换为隐式转换,常用算术类型转换目标是为所有的操作数即操作结果寻找一个通用的类型。

常用的算术类型转换涉及以下操作数:

l 具有两个操作数的算术操作符: *, /, %, +-

l 关系操作符: <, <=, >, >=, ==!=

l 位操作符:&, |^

l 条件操作符:?:

除关系操作符外,常用算术转换获得的公共实数类型通常为结果值的类型,然而,如果一个或多个操作数为复数类型,刚结果也具有复数类型。

常用算术转换的应用如下:

1. 如果任一个操作数为复数,此时,具有低转换等级的操作数转换为具有与其他操作数相同的类型,实数和虚数部分各自进行转换;

换句话说,如果一个操作数具有复数类型,通常算术转换仅匹配实数部分,下面是一些例子:

#include <complex.h>

// ...

short n = -10;

double x = 0.5, y = 0.0;

float _Complex f_z = 2.0F + 3.0F * I;

double _Complex d_z = 0.0;

y = n * x; // The value of n is converted to type double.

d_z = f_z + x; // Only the value of f_z is converted to

// double _Complex.

// The result of the operation also has type

// double _Complex.

f_z = f_z / 3; // The constant value 3 is converted to float.

d_z = d_z - f_z; // The value of f_z is converted to the type

// double _Complex.

2. 如果两个操作数为整数,则先对两个操作数进行整型提升,在此之后,如果类型还不相同,这时,会以以下规则进行转换:

a) 如果一个操作数具有unsigned 类型T,且它的转换级别等于或高于其他操作数的类型,那么其它操作数将转换为类型T

b) 否则,如果一个操作数具有signed类型T, 且其转换级别高于其它操作数类型,如果类型T足够大能够之前的所有类型值;如果不是,则两个操作数转换为类型T对应的无符号类型。

下面是一些例子:

Int I = -1;

Unsigned int limit = 200U;

Long n = 30L;

If ( I < limit)

X = limit * n;

在此例中,if条件中为比较语句, i的值为-1, 首先会转换为unsigned int,结果是一个很大的正数,在32位系统上,其值为232 – 1, 且在任何系统上,其值都大于limit,所以if条件为false.

例子中的最后一行,如果long的取值范围能够包含unsigned int的所有取值,则limit的值转换为变量n的类型long,如果不是,例如,intlong均为32位的宽度,则它们的类型将转换为unsigned long

除了以一情景外,常用算术转换会保护操作数的值:

l 当一个巨大的整数转换为浮点类型时,目标类型的精度可能不足以精确地表示此数;

l 超出无符号类型取值范围的负数;

在这两种情景中,数值超过了目标类型的范围或精度,这种转换将在接下来的一节算术类型转换的结果中讲述。

4.1.4 其他的隐式类型转换

在下列场景下,编译器也会自动转换算术值:

l 在分配或初始化,右操作数的值通常会转换为左操作数的类型;

l 在函数调用中,实参将转换为相应的形参类型,如果参数没有被声明,则会进行默认的参数提升,整型参数进行整型提升,float参数提升为double;

l return语句中,return表达式的值将转换为函数返回值的类型。

在一个复数的赋值语句中,例如x += 2.5, 两个操作数的值首先进行算术转换,所以运算的结果类型就为左操作数的类型,下面是一些例子:

#include <math.h> // Declares the function double sqrt( double ).

int i = 7;

float x = 0.5; // The constant value is converted from double to float.

i = x; // The value of x is converted from float to int.

x += 2.5; // Before the addition, the value of x is converted to

// double. Afterward, the sum is converted to float for

// assignment to x.

x = sqrt( i ); // Calculate the square root of i:

// The argument is converted from int to double; the return

// value is converted from double to float for assignment to x.

long my_func( )

{

/* ... */

return 0; // The constant 0 is converted to long, the function's return

// type.

}

分享到:
评论

相关推荐

    c语言核心技术(C in a Nutsbell)

    ### C语言核心技术(C in a Nutshell) #### 知识点概述 《C语言核心技术》是一本由C语言专家Peter Prinz与Tony Crawford合作撰写的权威性书籍,它旨在为C语言程序员提供全面且深入的核心知识和技术指导。本书不仅...

    C语言核心技术(英文文字版)

    ### C语言核心技术(英文文字版) #### 书籍概述 《C语言核心技术》是一本由 Tony Crawford 和 Peter Rinz 合著的经典技术书籍,由著名的 O'Reilly 出版社出版。该书首次发布于2005年12月,全书共计618页,ISBN号...

    c语言技术手册 chm

    《C语言技术手册》是一本全面且深入探讨C语言编程的资源,旨在帮助开发者和学习者迅速查询和理解C语言的各种函数及语法特性。CHM(Compiled Help Manual)格式是微软开发的帮助文档格式,通常包含丰富的索引、搜索...

    C语言核心技术(C: In a Nutshell)

    ### C语言核心技术(C: In a Nutshell) #### 核心知识点概览 《C语言核心技术》这本书由Tony Crawford和Peter Prinz等作者编写,由O'Reilly出版社于2005年12月出版。全书共有618页,涵盖了C语言的所有核心概念和...

    C语言核心技术 作者Tony rawford

    ### C语言核心技术——《C in a Nutshell》 #### 一、书籍简介 《C in a Nutshell》是由Tony Rawford和Peter Rinz共同编写的关于C语言的权威指南,出版社为O'Reilly,出版日期为2005年12月,ISBN编号为0-596-00697...

    C语言核心技术(pdf格式)

    《C语言核心技术》不仅适合C语言初学者快速入门,也适合有经验的程序员作为日常工作的参考手册。该书内容丰富,结构清晰,通过大量实例加深读者对C语言的理解和掌握,是C语言学习者和专业程序员的必备书籍之一。 ...

    MySQL核心技术手册(第二版)][1].(美)戴尔.扫描版.part2

     ·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。  ·给出了几个指导章节用于帮助新手入门。  ·为php、perl和c语言提供了应用程序编程接口(api)。  ·在每章的api开头部分提供了简要的指南。  ...

    C语言核心技术(英文PDF)

    《C语言核心技术》不仅适合初学者作为C语言学习的快速入门指南,也适合有经验的程序员作为日常工作的实用参考手册。书中深入浅出地讲解了C语言的各个方面,辅以丰富的示例代码,使读者能够在实践中加深理解和记忆。...

    C核心技术手册 (又名:C - In a Nutshell中文版)

    ### C核心技术手册知识点总结 #### 一、C语言的基础语法 **1.1 C的特征** C语言是一种过程式编程语言,由Dennis Ritchie于1970年代初在贝尔实验室开发,最初是为了实现UNIX操作系统及其应用程序能够尽可能地与...

    LINUX内核技术手册2.pdf

    根据提供的信息,《LINUX内核技术手册2.pdf》是一本专注于Linux内核配置、构建及安装的专业技术书籍。以下是对该书所涉及的关键知识点的详细总结: ### 一、书籍基本信息 - **书名**: Linux内核技术手册 - **作者*...

    H3C核心网产品技术参考资料汇总集.rar

    02H3 C VEPC3200核心网故障处理手册pdf 03H3CBBU3100系列基带处理单元故障处理手册,p 04H3 C VEPC3200产品开局自检手册pdf 05H3 C VMEGW3200技术白皮书pdf 06移动通信技术概述pdf 07H3CEPC3108核心网特性手册(E2123)...

    云打印C-Lodop技术手册

    《云打印C-Lodop技术手册》是一本详细介绍如何利用C-Lodop进行云端打印操作的技术文档。C-Lodop,全称为Cloud Lodop,是一款高效便捷的云打印解决方案,尤其适用于小票、箱贴、财务单等各类文档的远程打印需求。其...

    C语言核心技术(英文).pdf

    综上所述,《C语言核心技术》这本书不仅是一本C语言的入门指南,还是一本详尽的参考手册。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过系统地学习这些内容,读者可以更高效地使用C语言进行编程,并解决...

    S3C2416核心板开发板硬件手册

    ### S3C2416核心板开发板硬件...综上所述,S3C2416核心板及其开发板为各类嵌入式系统设计提供了强大的硬件基础,其详细的硬件手册则为开发者提供了全面的技术指导和法律提示,是进行相关项目开发不可或缺的参考资料。

Global site tag (gtag.js) - Google Analytics