数据类型的提升(promotion)
来源:互联网 发布:古城户外淘宝店 编辑:程序博客网 时间:2024/05/29 15:39
假如参与运算的数据类型不同或者取值范围过小,编译器会自动将其转换为相同的类型,这个类型就叫数据类型的提升(promotion)。
1. C++ 语言环境的规定
unsigned char a = 17;short b = -18;int c = 2;unsigned int d = 0;cout << (a + b) * c + d << endl; // 不是 -2 // 而是 4294967294
(1)整数 & 实数 ⇒ 实数
(2)两个都是整数型或实数型 ⇒ 转换为取值范围更大的数据类型;
(a+b)*c ⇒ int * int ⇒ int
(3)两个都是小于 int 型的整数型 ⇒ 都转换为 int 型;
a + b ⇒ unsigned char + short ⇒ int
(4)无符号整数型(unsigned)有符号整数型(signed)混用,转换为无符号整数型;
(a+b)*c + d ⇒ int + unsigned ⇒ unsigned
2. 常见错误
判断数组元素是否在给定的整数型变量数组 vector<int> 中按牲畜排列:
bool isSorted(const vector<int>& seq){ for (int i = 0; i < seq.size()-1; ++i) if (seq[i] > seq[i+1]) return false; return true;}
可能引起数据类型提升错误的原因在于,for 循环的上限值,seq.size() - 1。STL 中,所有容器的 size() 函数将会返回无符号整数型变量 size_t。
因此,seq.size()-1 总是转换为 size_t 类型,最大值就会变成全1(2^32-1)。
bool isSorted(const vector<int>& seq){ for (int i = 1; i < seq.size(); ++i) if (seq[i] > seq[i-1]) return false; return true;}
0 0
- 数据类型的提升(promotion)
- 整型提升(integer promotion)
- 模板的使用:Promotion Traits( 类型提升之特征萃取)
- C语言的自动参数提升(default argument promotion)规则
- 关于C语言中的 " 类型提升 "(type promotion)
- 类型转换下编译器偷偷做的事————整形提升(Inter Promotion)
- C语言中的整型提升(integral promotion)
- C语言中的整型提升(integral promotion)
- C语言中的整型提升(Integral Promotion)
- C/C++ 整型提升(Integral Promotion)
- 表达式的数据类型自动提升
- java数据类型的自动提升
- 数据类型提升
- Java表达式的数据类型自动提升问题
- js高级提升(一)数据类型
- 【C/C++】鲜为人知的知识--Integer Promotion
- 线段树学习(2)POI Promotion
- USACO2017JanuaryPlatinum Promotion Counting(奶牛升职计数)
- http://www.cnblogs.com/jiangjing/archive/2013/01/14/2860163.html
- OpenEphyra学习笔记1
- 12届湖南省赛 F:地铁
- Android 属性动画使用(二)
- 极客- 博文8 - 海伦公式求三角形面积
- 数据类型的提升(promotion)
- js 中递归 与 回调函数
- android view-贝塞尔曲线应用实例
- ubuntu 14.04 安装fcitx以及搜狗拼音输入法
- neuraltalk2-代码解析-(5)-train.lua
- 三层架构和MVC模式
- js 中创建对象 构造函数 this
- zynq学习03 zynq中三种实现GPIO的方式
- 学习mybatis3遇到关于integer的怪事