数据类型的提升(promotion)
假如参与运算的数据类型不同或者取值范围过小,编译器会自动将其转换为相同的类型,这个类型就叫数据类型的提升(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;
}
数据类型的提升(promotion)相关推荐
- java学习二 数据类型自动提升 0x开头的数据是 16进制且是int型
变量只能定义一次,不能定义两次, 变量的作用域:当前的大括号与子括号才有效 变量的作用:存储值,取值 整型:向上自动升级,向下强制降级 char,byte,shot参与运算时候自动提升为int型 因为 ...
- redis五大数据类型使用场景
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Redis是一种基于键值对的NoSQL数据库,它的值主要由 ...
- java怎么改变数据类型_java数据类型之间的转换,是怎么回事啊? - 收获啦
1.数据类型的分类 2.比较数据类型之间的字节大小 1字节=8位 . 3.转换中的知识点 *java中整数类型默认的int类型:小数类型默认的double: *String的字符串转化为char类型时 ...
- java表达式类型自动提升
[一道经典的Java面试题] short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 答案是:前者错,后者对.相信不管是否经历过java ...
- Java基本数据类型及String类
基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型.java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化. 一. Java ...
- java 简单数据类型_java基本数据类型
基本数据类型 JAVA中一共有八种基本数据类型,他们分别是 byte.short.int.long.float.double.char.boolean 类型 型别 字节 取值范围 byte 整型 1b ...
- java 类型转换_java中的基本数据类型的转换
本文参考了如下两篇文章: Java中,经常可以遇到类型转换的场景,从变量的定义到复制.数值变量的计算到方法的参数传递.基类与派生类间的造型等,随处可见类型转换的身影.Java中的类型转换在Java编码 ...
- Java开发中数据类型之间的转换
1).简单类型数据间的转换,有两种方式:自动转换和强迫转换,通常产生在表达式中或方法的参数传递时. 自动转换 具体地讲,当1个较"小"数据与1个较"大"的数据1 ...
- 【JAVA基础篇】基本数据类型及自动类型转换
一.8种基本数据类型以及占用内存空间大小 boolean 1byte或4byte byte 8bit/1byte char 16bit/2byte short ...
最新文章
- 数据库jdbc property文件配置信息片段
- 哈佛、MIT学者联手,创下矩阵乘法运算最快纪录
- MXNet 安装 Windows
- 【python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
- PTA第3章-2 查验身份证 (15 分)
- 爬虫爬出来的数据不全_斥巨资学完Python数据分析后,给运营人总结7个小建议...
- java delphi aes加密算法_Delphi AES,又一个加密算法例子
- 苹果se2_搜狗输入法适配苹果se2,给用户带来新玩法。
- Hibernate之连接池配置
- hadoop启动_hadoop服务快速部署
- 计算机网络工程师模拟题库,计算机网络工程师模拟题56.doc
- UG软件使用10大技巧,将会大大提升工作效率
- 迷你世界怎么显示服务器未连接,打开迷你世界提示网络异常或者连接不上
- Android平台根据分辨率计算屏幕尺寸
- 探讨下app的包为什么抓不到
- 【WIN10】win10更改以太网名称以及以太网下网络名称
- 人脸、微笑、口罩识别
- 无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。
- 鸿蒙玺绶能升级么,属性激增 《诛仙2》强力装备大集合(三)
- CIC详细设计说明文档