隐式类型转换和整型提升
2016-05-12 23:21
316 查看
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,
如果不进行整型提升,则当移位是会将高位丢失。
相关文章推荐
- CentOS 6.3下 源码包安装LAMP(Linux+Apache+Mysql+Php)环境
- java中的IO操作-IO介绍
- UIImageView和UIImage
- js中(function(){…})()立即执行函数写法理解
- 国内知名互联网公司的开源项目
- 实验8 SQLite数据库操作
- Codeforces #352 Div2 D Robin Hood(二分查找)
- 使用Java显示图片2
- leetcode shell题解
- Python2.7 Queue模块学习
- js中(function(){…})()立即执行函数写法理解
- n维向量旋转(循环移位)——学习《编程珠玑》
- 典型用户及用户场景描述
- Codeforces #352 Div2 C Recycling Bottles
- 安卓日记——自定义view(2)
- 使用Java显示图片
- flask发送邮件问题(yeah.net与Gmail设置的不同)
- 文件操作的几套接口
- char为什么取值-128——127
- 第29篇 杂文-写给自己