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

翻译 2011年01月18日 23:48:00
4.1.5.3 有符号整型转换

  整型类型转换中超过目标类型取值范围的问题,不仅存在在无符类型转换中,也存在有符号类型转换中,例如,当一个值由类型longunsigned int转换为int,结果为有符号整型并溢出,这与转换为无符号整数不同,后者将会丢弃执行结果。

  绝大多数编译会丢弃原来值二进制表示的高位,并将最低位解释为新类型,如下例所示,在这种策略下,一个unsigned int类型现有的位模式被解释为一个有符号int值。

    #include <limits.h>         // Defines macros such as UINT_MAX

    int i = UINT_MAX;           // Result: i = -1 (in two's complement

                                // representation)

然而,由于编译器不同,这样的一个转换有的编译器会抛出一个信号提示值溢出。当一个实数和一个复数转换为有符号整型时,与转换为无符号整型具有同样的规则,这与前面一节描述的一样。

4.1.5.4 浮点类型实数转换

  不是所有的整型值可以被浮点型表示,例如,虽然float类型的取值范围包含了longlong long的取值范围,float仅精确到小数点后6位,因而,一起long类型的值不能精确地存储在float对象中,这种转换的结果是下一个或更高的二进制值,如下例所示:

    long  l_var = 123456789L;

    float f_var = l_var;           // Implicitly converts long value to float.

 

    printf("The rounding error (f_var - l_var) is %f/n", f_var - l_var);

记住此例中的减操作,像所有浮点型一样,结果至少具有double类型的精度,此代码段输出如下:

The rounding error (f_var - l_var;) is 3.000000

任意一个浮点类型可以使用精度比它大的另一个浮点类型来表示,因此,当一个double值转换为long double,或者当一个float值转换为doublelong double,值会精确地保持。当从一个高精度转换为一个低精度类型时,然而,其值可能会超出新类型的范围,如果超出,转换的结果是未定义的;如果其值在目标类型的范围内,但目标类型的精度不能精确地表示它,此时,结果为下一更小的或下一个更大的二进制值,Example 2-2中的程序描述了转换为一个低精度浮点类型时产生的误差错误。

  当一个复数转换为一个实数时,虚数部分被简单地丢弃掉,结果为复数据的实数部分,它之后可能会转换为本章中描述的目标类型。

4.1.5.5 浮点型复数转换

  当一个整型或浮点型实数转换为一个复数类型时,结果值的实数部分按照前面的规则转换为浮点型实数,虚数部分为0

  当一个复数转换为另一个不同的复数类型时,实数和虚数数分单独根据浮点型实数的规则进行转换。

    #include <complex.h>        // Defines macros such as the imaginary

                                // constant I

    double _Complex dz = 2;

    float _Complex fz = dz + I;

在两行初始化语句中,整型常量2隐式地转换为double_Complex并赋值给dz, dz的结果为2.0 + 0.0 * I

fz的初始化中,dzdouble_Complex值两部分都转换为floatfz的实数部分等于2.0F, 虚数部分为1.0F

 

漫步线性代数二十六——特征值和特征向量(续)

上面展示了当求解du/dt=Audu/dt=Au时,如何自然而然的引出特征值λ\lambda和特征向量xx,这样的一个方程有纯指数解u=eλtxu=e^{\lambda t}x;特征值给出了增长或衰减...
  • u010182633
  • u010182633
  • 2016年09月22日 19:52
  • 577

linux c函数库参考手册

Linux C函数库参考手册 第1章字符测试函数 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii(测试字符是否为ASCII码字符) ...
  • a1009563517
  • a1009563517
  • 2015年10月30日 14:04
  • 1254

6.1、指针的概念

为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的。 如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。系统根据程序中定义的变量类型,分配一定长度的空间。例如,...
  • dapinxiaohuo
  • dapinxiaohuo
  • 2015年03月09日 15:13
  • 236

人工智能的五大核心技术

计算机视觉、机器学习、自然语言处理、机器人和语音识别是人工智能的五大核心技术,它们均会成为独立的子产业。   计算机视觉     计算机视觉是指计算机从图像中识别出物体、...
  • sergeycao
  • sergeycao
  • 2017年07月17日 16:40
  • 405

Java核心技术--开篇

从毕业到现在一年多了,工作也换了两家,第一家是一个央企,进去差不多半年时间,干的就是一些琐碎的事情,开发任务也基本没有(改改官网,申请公众号),到后来给我一个人给了一个内控项目(也就是一个内部办公系统...
  • ILV_XJ
  • ILV_XJ
  • 2017年11月06日 10:43
  • 105

MySQL C API(5.1参考手册)

C API代码是与MySQL一起提供的。它包含在mysqlclient库中,并允许C程序访问数据库。 MySQL源码分发版的很多客户端是用C语言编写的。如果你正在寻找能演示如何使用C API的示例,可...
  • qq920020796
  • qq920020796
  • 2015年10月19日 15:10
  • 2321

软件开发的核心技术

《编程导论(Java)·0.1.5 问题求解》 程序员采用编程语言编写源代码的活动——编程常常概括成问题求解(problem solving)。 待解决的问题可大可小,而问题的解决方案正好需要计算机...
  • yqj2065
  • yqj2065
  • 2015年07月09日 16:39
  • 3222

iOS开发核心技术(一)——多线程——简介

第三方
  • u014624688
  • u014624688
  • 2014年04月21日 22:21
  • 835

《这就是搜索引擎:核心技术详解》读书笔记

学Java的时候也顺便看了一下网上的一个爬虫的源码,感觉看完了收获也很有限,只是大概了解了一下其基本思路:从用户添加的种子URL作为起点,不断请求web页面,然后从页面中提取出新的URL,添加到爬取队...
  • hust_dxxxd
  • hust_dxxxd
  • 2016年05月03日 22:12
  • 501

Spring的核心技术(一)

这部分参考文档涵盖了Spring框架中的所有关键技术,其中最重要的是Spring框架的控制反转容器(IoC),然后是与IoC容器紧密结合的Spring的面向切面(AOP)的编程技术。Spring框架有...
  • FireOfStar
  • FireOfStar
  • 2015年11月16日 08:59
  • 2239
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C核心技术手册(二十八)
举报原因:
原因补充:

(最多只允许输入30个字)