文档章节

C Primer Plus 第5章 运算符、表达式和语句 5.5 类型转换

idreamo
 idreamo
发布于 2016/05/21 06:31
字数 888
阅读 36
收藏 0

1、当出现在表达式里时,有符号和无符号的char和short类型都将被自动转换为int,在需要的情况下,将自动被转换为unsigned int。在K&RC下,但不是在当前的C下,folat将被自动转换为double.因为是转换成较大的类型,所以这些转换被称为提升。

2、在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别。

3、类型从高到低的顺序是:long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int 、int。一个可能是例外是当long和int具有相同的大小时,此时unsigned int比long的级别更高。之所以short和char类型没有出现在此清单里,是因为他们已经被提升为int或也可能被提升为unsigned int。

4、在赋值语句里,计算的最后结果将被转换成将要被赋于值的那个变更的类型。

5、当被作为函数的参数传递时,char和short会被转换为int,folat会被转换为double。

提升通常是一个平滑的无损害的过程,但是降级可能导致真正的问题。原因很简单,一个较低级别的类型可能不够大,不能存放一个完整的数。

程序清单5.14 convert.c

/*convert.c --自动类型转换*/
#include <stdio.h>
int main ()
{
    char ch ;
    int i;
    float fl;

    fl = i = ch = 'C';                                               /*9 */
    printf("ch = %c, i = %d, fl = %2.2f\n",ch,i,fl);                 /*10*/
    ch = ch+1;                                                       /*11*/
    i=fl + 2*ch;                                                     /*12*/
    fl= 2.0*ch + i;                                                  /*13*/
    printf("ch = %c, i = %d,fl = %2.2f\n",ch ,i ,fl);                /*14*/
    ch=5212205.17;
    printf("Now ch = %c\n",ch);
    return 0 ;
} 

下面是在8位char,32位int的系统上运行程序的过程分析:

9和10:字符‘C‘被作为1字节的ASCII值存储在ch里。整数变量i接受由’C‘转换成的整数,即67,它以4字节存储。最后,fl接受由67转换成的浮点数,即67.00.

11和14行:字符变量’C‘被转换成整数67,然后把该整数加1.结果的4字节整数68被截为1字节并存储在ch里。当使用%c说明符进行打印时,68被解释为’D‘的ASCII码。

12和14行:为了和2相乘,ch的值被转换为一个4字节的整数68.乘积整数136为了和fl相加而被转换为浮点类型。结果203.00f被转换成int类型并存储在i中。

13和14:为了和2.0相乘,ch的值('D',即68)被转换为浮点类型。为了做加法,i值(203)被转换为浮点类型。结果(339.00)被存储在fl中。

15和16:在这里,示例程序尝试了一个降级。把ch设置为一个很大的数。在截去高位后,ch最终变成了连字符这一字符 的ASCII码。

指派运算符

到目前为止我们讨论的类型转换是自动完成的。然而,您也可能需要 准确的类型,或者需要在程序中表明您是知道您正在做类型转换的。完成这一任务的方法被称为指派(cast),其步骤是在某个量的前面放置用圆括号括起来的被希望转换成的类型名。圆括号和类型名一起构成了指派运算符。其一般形式如下:(type)

 

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

tony关东升
2018/06/26
0
0
关东升的《《从零开始学Swift》即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》《从零开始学Swift》将在《Swift开发指南》第1版的基础上添加Swift2.0的...

智捷课堂
2015/08/17
109
0
[编程语言]C陷阱与缺陷

内容摘要 作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过...

21gprs
2014/05/23
0
0
C++ Primer 学习笔记(第四章:表达式)

C++ Primer 学习笔记(第四章:表达式) [TOC] 4.1 基础 左值和右值: 当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。...

ShawnLue
2015/08/20
44
0
【C++】第5章 循环和关系表达式 知识总结

《C++ Primer Plus》第5章知识点总结 for循环 for(initialization; test-expression; update-expression) body 语句:age = 100; 表达式:age = 100 对于 for( int i=0 ;i<5 ;i++),这种语句......

qq_37792173
2017/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
45分钟前
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
46分钟前
7
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
49分钟前
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
55分钟前
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部