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,如果不是,例如,int和long均为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.
}
分享到:
相关推荐
·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。 ·给出了几个指导章节用于帮助新手入门。 ·为php、perl和c语言提供了应用程序编程接口(api)。 ·在每章的api开头部分提供了简要的指南。 ...
02H3 C VEPC3200核心网故障处理手册pdf 03H3CBBU3100系列基带处理单元故障处理手册,p 04H3 C VEPC3200产品开局自检手册pdf 05H3 C VMEGW3200技术白皮书pdf 06移动通信技术概述pdf 07H3CEPC3108核心网特性手册(E2123)...
C程序员在编写程序时手头一定要有这本书。在这本书中,C 语言专家 Peter Prinz和Tony Crawford为你提供大量的编程参考信息。全书叙述清晰,语句简洁,分析深刻。本书主题包括: C 语言的语法、GNU编译器选项、标准...
C语言核心技术是C语言工程师常用的手册知道,是外文翻译过来的,通俗易懂,适合初学者以及开发人员
目前还没翻译完成,持续更新中,第一次翻译,遇到其中的错误请大家留言提醒,谢谢。
ALIENTEK STM32H750核心板底板 PDF原理图+AD集成封装库+主要器件技术手册: 集成封装库: 3.5TFTLCD封装库.IntLib ATK-4.3' TFTLCD电容触摸屏模块_V1.2.IntLib ATK-4342 4.3寸RGB屏模块封装库.IntLib ATK-7016&7084 ...
迅为iTOP4412核心板配套开发底板ALTIUM设计硬件(原理图+PCB)+核心器件技术手册,2层板设计,大小为192x108mm,双面布局布线,Altium Designer 设计的工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)软件打开...
书名:JSP 2.0 技术手册(电子书) 格式:PDF 出版:电子工业出版社 作者:林上杰、林康司 本书图文并茂,以丰富的实例为引导,全面介绍了主流的 Java Web 开发技术—— JSP 2.0,重点介绍Java在展示层的两项重要技术...
迅为iTOP4412核心板配套开发底板cadence设计硬件(原理图+PCB)+核心器件技术手册,2层板设计,大小为192x108mm,双面布局布线,cadence 设计的原理图PCB工程文件,包括完整的原理图及PCB文件,可以用Altium(AD)软件...
C++核心编程技术 .rar http://down.qiannao.com/space/file/yuexingchen2/-4e0a-4f20-5206-4eab/C-002b-002b-0020-0020-00b7C-0020-0020vc/C-002b-002b-6838-5fc3-7f16-7a0b-6280-672f-0020.rar/.page C程序100例 ....
·提供了mysql语句、函数、配置选项和实用工具的一个完整手册。 ·给出了几个指导章节用于帮助新手入门。 ·为php、perl和c语言提供了应用程序编程接口(api)。 ·在每章的api开头部分提供了简要的指南。 ...
这是一套Java核心技术基础使用手册,包含Java 基础核心总结、Java核心基础、Java核心知识、Java 基础面试题总结等,内含最强 Java 核心知识点整理及思维导图,需要的朋友可下载试试! Java是一门编程语言,Java发展...
ALIENTEK STM32F750核心板+开发底板PDF原理图+AD集成封装库+主要器件技术手册,ALTIUM集成封装库器件列表: Library Component Count : 63 Name Description ----------------------------------------------------...
STM32F767单片机核心板+开发底板PDF原理图+AD集成封装库+主要器件技术手册:3710FXXX037XXFX01.pdf 3710MXXX046XXFX01.pdf AMS1117.pdf AP3216C.pdf AT24C02.pdf AT8574_8574A_DS001V1.2.pdf CAT6219.pdf CH340.pdf ...
H3C S9500系列交换机是H3C公司面向以业务为核心的企业网络架构而推出的新一代核心路由交换机,该产品基于H3C公司自适应安全网络的技术理念,在提供大容量、高性能L2/L3交换服务基础上,进一步融合了硬件IPv6、网络...
ALIENTEK STM32F767(核心板+开发底板)PDF原理图+AD集成封装库+主要器件技术手册,集成封装库部分型号器件列表: AMS1117 AP3216C ALS+PS Sensor ATK-HC05 ATK-HC05 BAT BEEP BUTTON C CAP CH340G USB2UART D DB...
TI基于KeyStone的8核固定浮点数字信号处理器,DSP集成C66x CorePac,每个核心在1至1.25 GHz到10 GHz的运行。
H3C MSR 50系列多业务开放路由器包含MSR 50-40和MSR 50-60两款设备,该系列产品可以为大型分支机构提供高性能、多业务的一体化网络方案,也可以作为大中型企业的核心网络设备,完成数据、语音、视频等多种流量的广域...