假如参与运算的数据类型不同或者取值范围过小,编译器会自动将其转换为相同的类型,这个类型就叫数据类型的提升(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)相关推荐

  1. java学习二 数据类型自动提升 0x开头的数据是 16进制且是int型

    变量只能定义一次,不能定义两次, 变量的作用域:当前的大括号与子括号才有效 变量的作用:存储值,取值 整型:向上自动升级,向下强制降级 char,byte,shot参与运算时候自动提升为int型 因为 ...

  2. redis五大数据类型使用场景

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Redis是一种基于键值对的NoSQL数据库,它的值主要由 ...

  3. java怎么改变数据类型_java数据类型之间的转换,是怎么回事啊? - 收获啦

    1.数据类型的分类 2.比较数据类型之间的字节大小 1字节=8位 . 3.转换中的知识点 *java中整数类型默认的int类型:小数类型默认的double: *String的字符串转化为char类型时 ...

  4. java表达式类型自动提升

    [一道经典的Java面试题] short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 答案是:前者错,后者对.相信不管是否经历过java ...

  5. Java基本数据类型及String类

    基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型.java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化. 一. Java ...

  6. java 简单数据类型_java基本数据类型

    基本数据类型 JAVA中一共有八种基本数据类型,他们分别是 byte.short.int.long.float.double.char.boolean 类型 型别 字节 取值范围 byte 整型 1b ...

  7. java 类型转换_java中的基本数据类型的转换

    本文参考了如下两篇文章: Java中,经常可以遇到类型转换的场景,从变量的定义到复制.数值变量的计算到方法的参数传递.基类与派生类间的造型等,随处可见类型转换的身影.Java中的类型转换在Java编码 ...

  8. Java开发中数据类型之间的转换

    1).简单类型数据间的转换,有两种方式:自动转换和强迫转换,通常产生在表达式中或方法的参数传递时. 自动转换 具体地讲,当1个较"小"数据与1个较"大"的数据1 ...

  9. 【JAVA基础篇】基本数据类型及自动类型转换

    一.8种基本数据类型以及占用内存空间大小 boolean  1byte或4byte byte        8bit/1byte char        16bit/2byte short      ...

最新文章

  1. 数据库jdbc property文件配置信息片段
  2. 哈佛、MIT学者联手,创下矩阵乘法运算最快纪录
  3. MXNet 安装 Windows
  4. 【python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
  5. PTA第3章-2 查验身份证 (15 分)
  6. 爬虫爬出来的数据不全_斥巨资学完Python数据分析后,给运营人总结7个小建议...
  7. java delphi aes加密算法_Delphi AES,又一个加密算法例子
  8. 苹果se2_搜狗输入法适配苹果se2,给用户带来新玩法。
  9. Hibernate之连接池配置
  10. hadoop启动_hadoop服务快速部署
  11. 计算机网络工程师模拟题库,计算机网络工程师模拟题56.doc
  12. UG软件使用10大技巧,将会大大提升工作效率
  13. 迷你世界怎么显示服务器未连接,打开迷你世界提示网络异常或者连接不上
  14. Android平台根据分辨率计算屏幕尺寸
  15. 探讨下app的包为什么抓不到
  16. 【WIN10】win10更改以太网名称以及以太网下网络名称
  17. 人脸、微笑、口罩识别
  18. 无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。
  19. 鸿蒙玺绶能升级么,属性激增 《诛仙2》强力装备大集合(三)
  20. CIC详细设计说明文档

热门文章

  1. div html 下边加横线_css怎么添加下划线?
  2. matlab中求方差的,matlab中求方差为什么除以n-1?
  3. python海龟交易策略_【手把手教你】用Python量化海龟交易法则
  4. 大数据学习之Hadoop任务输出到多个目录中
  5. Spring Date JPA实现增删改查
  6. Python 之面向对象 继承
  7. group by with cube
  8. jdk jre jvm的关系
  9. 第八届蓝桥杯第六题最大公共子串
  10. opencv将图像转换成二维数组再将数组数据传给新图像