隐式类型转换和整型提升
2016-04-04 13:04
344 查看
c整型中的运算总是至少以缺省整型类型的精度来进行的,所以当字符型或者短整型在进行运算时为了获得这个精度,先要提升成普通整型,再运算。
例:
char a=127;
char b=1;
char ret=a+b;
在进行运算时,先进行“整型提升”(提升成整形):
char类型的127 是:0111 1111
进行整型提升后是:00000000 00000000 00000000 01111111
char类型的1 是:0000 0001
整型提升后是:00000000 00000000 00000000 00000001
提升后在进行运算:
00000000 00000000 00000000 01111111
00000000 00000000 00000000 00000001
结果 00000000 00000000 00000000 10000000
然后再发生截断:ret=1000 0000
在这个例子中计算的结果与算术结果没有区别,但是入股在下面这个例子中区别就大了:
ret=((a<<2)+b)>>2,
如果不进行整型提升,则当移位是会将高位丢失。
例:
char a=127;
char b=1;
char ret=a+b;
在进行运算时,先进行“整型提升”(提升成整形):
char类型的127 是:0111 1111
进行整型提升后是:00000000 00000000 00000000 01111111
char类型的1 是:0000 0001
整型提升后是:00000000 00000000 00000000 00000001
提升后在进行运算:
00000000 00000000 00000000 01111111
00000000 00000000 00000000 00000001
结果 00000000 00000000 00000000 10000000
然后再发生截断:ret=1000 0000
在这个例子中计算的结果与算术结果没有区别,但是入股在下面这个例子中区别就大了:
ret=((a<<2)+b)>>2,
如果不进行整型提升,则当移位是会将高位丢失。
相关文章推荐
- C#特性 匿名类型与隐式类型局部变量使用介绍
- 对C语言中赋值运算符的理解
- C语言中的整型提升与混合类型数据的运算
- [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型 推荐
- 程序设计的基本概念
- scala中的隐式类型转换的实现
- cocos开发环境配置
- 【算法】蛇形矩阵
- 前端菜鸟------了解BootStrap的文件及作用
- 利用浏览器缓存抓取网络资源:【炉石传说】所有卡牌png图片地址
- Mysql
- js开发的45个人技巧
- 字符串搜索算法(二)Sunday算法
- RNN学习笔记(五)-RNN 代码实现
- 关于shape和selector和layer-list的drawable详细说明
- hdu 1806(线段树区间合并)
- 开源堡垒机安装测试上线部署详解-----麒麟开源堡垒机
- 错过了愚人节,还有清明节
- poj 2195
- R语言笔记 NA 值 处理