C的整型算术运算总是至少以缺省整型类型的精度来进行的。
        为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升

举个例子:

char a = 127;
char b = 3;
char c = a + b;
printf("%d",a+b);
printf("%d",c);

什么是整型提升?上面这段代码的输出结果又是什么呢?

整型提升的意义:
        表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。
        通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

简单来说,当我们在进行字符(或者短整型)类型的运算时,它们需要提升到整形之后在进行运算,拿字符类型来说,一个字符变量的大小是一个字节,也就是他们需要提升到整形的大小之后(也就是字节字节)之后再进行运算,如果我们把他们放到另一个变量中,那么计算后的四个字节的结果会发生截断,重新变成一个字节。整形提升的过程,是一直向左复制符号位,直到达到四个字节的大小。具体过程如下图。

所以,我们有符号的char类型,存储数字的范围就是(-128~127),而无符号的char类型存储的范围就是(0~255) 。当有符号的char类型的存储的为(10000000)时,无法进行转换,所以规定为-128。短整型来进行计算时也是如此。

算术转换:

        如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。

long double
double
float
unsigned long int
long int
unsigned int
int

        如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。

C语言隐式类型转换(字符类型以及短整型的运算规则)相关推荐

  1. C 语言格式输出 %hd,%hu分别是 短整型 和 无符号的短整型。

    C 语言格式输出 %hd,%hu分别是 短整型 和 无符号的短整型. %hd,%hu分别是 短整型 和 无符号的短整型. posted on 2011-08-22 20:29 雨亭 阅读( ...) ...

  2. 短整型转字符数组,字符数组转短整型

    一.短整型转字符数组 void main() {char num[2];short int a = 299;num[0] = (char)a ;num[1] = (char) (a >> ...

  3. C 语言隐式类型转换

    前言 C 语言隐式执行的类型转换,让我们难以捉摸.有时默默进行的类型转化会导致难忘的经历,我曾经就因 -1 > 1 这个表达式为真,找了一个多小时的 bug.你可能会想 -1 怎么可能大于 1, ...

  4. C语言 - 隐式类型转换

    文章目录 一.整型提升 1.什么是整型提升 2.整型提升的意义 3.如何进行整型提升 4.通过代码验证整型提升的存在 二.算术转换 一.整型提升 1.什么是整型提升 C语言的整型算术运算总是至少以缺省 ...

  5. python隐式类型转换_JS 类型隐式转换

    1.js数据类型 js中有7种数据类型,可以分为两类:原始类型.对象类型: 基础类型(原始值): Undefined. Null. String. Number. Boolean. Symbol (e ...

  6. 隐式类型转换和整型提升

    c整型中的运算总是至少以缺省整型类型的精度来进行的,所以当字符型或者短整型在进行运算时为了获得这个精度,先要提升成普通整型,再运算. 例: char a=127; char b=1; char ret ...

  7. C语言----表达式求值之隐式类型转换

    前言: 表达式求值的顺序一部分是由操作符的优先级和结合性决定. 同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型,称为隐式类型转换,下面给出隐式类型转换的详细讲解,希望对大家有所帮助~ 隐 ...

  8. c语言float转换为int_C语言的隐式类型转换和显示类型转换

    C语言是一种强类型语言,当使用一种类型的对象代替另外一种类型的对象进行操作时,必须首先进行类型转换. 类型转换的方式,一般可分为隐式类型转换和显示类型转换(也称为强制类型转换). 1.隐式类型转换 隐 ...

  9. C语言操作符详解 隐式类型转换 (整型提升 算数转换)

    目录 一.算术操作符 二.左移操作符 右移操作符 1.二进制序列 2.左移操作符 3.右移操作符 3.1.逻辑运算/算术运算 3.2.对于移位运算符,不要移动负数位,这是标准未定义的 3.3.对于移位 ...

最新文章

  1. js 获取URL后面的参数
  2. java中解决Launch configuration TimezoneDump references non-existing project问题
  3. reactjs创建虚拟DOM的两种方式:使用jsx和js创建虚拟DOM
  4. eclipse启动不了并报错Java was started but exit with code 13 问题解决
  5. 焦旭超 201771010109《面向对象程序设计课程学习进度条》
  6. android thread实例
  7. ThinkPHP删除指定文件(物理删除) 点击链接可查看详情(对学习可有很大的帮助的...
  8. Tensorflow官方文档学习理解 (四)-深入MNIST
  9. 单细胞测序的marker基因
  10. 为什么别人报价成单,而你不行?
  11. 大数据离线阶段Day5之多彩缤纷数据源
  12. html中3d图片轮播图,js实现图片3D轮播效果
  13. 计算机开机一直无法访问,电脑开机时显示:AutoIt 错误 不能打开脚本文件 如何处理...
  14. 压缩图片大小至指定Kb以下
  15. windows操作系统基础总结
  16. Docker入门实战---修改Docker镜像源
  17. android camera 废弃,Android相机android.hardware.Camera已弃用
  18. Java中JVM虚拟机详解
  19. 【C语言】scanf,getchar,getch函数详解
  20. 常规串口驱动CH340的安装

热门文章

  1. 2008-2010:中国医疗器械公司规模排名前20名
  2. 美颜sdk磨皮算法代码解析
  3. DOT: 用于视觉SLAM的多目标跟踪
  4. fstat/stat/lstat
  5. ·我的黑苹果装机记录(持续更新)
  6. 对“超图学习”相关优势及适用范围的学习及整理
  7. php基础一(数组)
  8. Ubuntu下的图像编辑软件
  9. RMA( 退货)的业务流程
  10. Android手机免root安装Linux+图形化