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

翻译 2011年01月14日 23:52:00

4.1 算数类型转换

  类型转换通常存在于任意两个算数类型中,当必要时,编译器隐式地执行它们,如果新类型能够表示它,此种转换将保护它的值,这通常也并不绝对,例如,当你将一个负数转换为无符号类型,或将一个浮点数的小数部分由double转换为int时,新类型不能表示原来的值,在这种情况下,编译器会产生一个告警。

4.1.1 类型的层次

  当算术操作数具有不同的类型时,隐式类型转换由类型的层次来决定,类型的层次依据下列规则:

l  任意两个无符号整数类型具有不同的转换等级,如果一个比另一个宽,它将具有较高等级;

l  每一个有符号整数类型具有与相应的无符号整数类型相同的转换等级,charsigned charunsigned char 具有相同的转换等级;

l  标准的整数类型等级排列如下:

_Bool < char < short < int < long < long long

l  任意标准整数类型具有比同样宽度的扩展整数类型较高的等级;

l  每一个枚举类型具有与相应的整数类型相同的等级;

l  浮点类型以下下顺序排列:

  Float < double < long double

l  等级最低的浮点型float的等级高于任何整数类型;

l  每一个复数浮点类型具有与其实数类型和虚数类型相同的等级。

4.1.2整数提升

  在任何表达式中,你通常可以使用一个其类型等级低于int的值来替代int unsigned int类型操作数,你也可以将位域当做整数类型操作数来使用,在这种情况下,编译器使用整数提升,任何类型级别低于int的半自动被转换为int类型,倘若int类型能够表示所有操作数原来的类型;如果int不足以表达,操作数会被转换为unsigned int

  整数提升通常保护操作数的值,一些例子如下:

   Char c = ‘?’;

   Unsigned short var = 100;

   If (c < ‘A’)          //The character constant ‘A’ has type int; the value

                    //of c is implicitly promoted to int for the comparison.

 

   Var = var + 1;      //Before the addition, the value of var is promoted to int

                   // or unsigned int.

在最后这个语句中,在执行加法操作前,编译器将第一个加数的类型提升为intunsigned int,如果intshort具有相同的宽度,就像在16位机器上,这时,带符号的int类型没有足够的宽度来表示unsigned short类型var的所有值,此种场景下,变量的值被提升为unsigned int,在加法执行以后,结果转换为unsigned short

 

linux c函数库参考手册

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

6.1、指针的概念

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

人工智能的五大核心技术

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

Java核心技术--开篇

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

MySQL C API(5.1参考手册)

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

软件开发的核心技术

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

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

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

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

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

Spring的核心技术(一)

这部分参考文档涵盖了Spring框架中的所有关键技术,其中最重要的是Spring框架的控制反转容器(IoC),然后是与IoC容器紧密结合的Spring的面向切面(AOP)的编程技术。Spring框架有...
  • FireOfStar
  • FireOfStar
  • 2015年11月16日 08:59
  • 2234

《黑客-计算机革命的英雄(二十五周年新版)》读后感

《黑客-计算机革命的英雄(二十五周年新版)》读后感 https://book.douban.com/subject/6860890/     本书记录了上世纪50年代到80年代,那些为...
  • hello3389
  • hello3389
  • 2016年06月01日 16:55
  • 187
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C核心技术手册(二十五)
举报原因:
原因补充:

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