数据类型的提升(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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 科目二考试没去怎么办 网约车驾龄不到怎么办 科四预约不上怎么办 教练不退钱怎么办找谁 驾考出入证丢了怎么办 科二成绩单丢了怎么办 考驾照的准考证丢了怎么办 驾考预约去不了怎么办 科目一预约没去怎么办 打狂犬疫苗期间感冒了怎么办 公司社保欠费不交怎么办 25号社保不交怎么办欠费 会计从业停考了怎么办 黑龙江龙育黄了档案怎么办 科目四档案丢了怎么办 从上海调档案到杭州怎么办 户口迁移身份证变更护照怎么办 有中国签证的孩子怎么办户口 大学生户口在学校怎么办签证 户口在南方人才市场怎么办签证 报警电话接到说方言的怎么办 学生去新加坡旅游签证怎么办 出入境的受理编号不见了怎么办 职工下岗档案单位丢失怎么办退休 大学毕业档案在自己手里怎么办 青岛李沧区房产证加名字怎么办手续 公积金迟交了1天怎么办 科一预约不上怎么办 科目一考试没去怎么办 科目一成绩单丢了怎么办 考科目二身份证丢了怎么办 考科目三身份证丢了怎么办 考科目一身份证丢了怎么办 滴滴顺风车被永久封禁怎么办 三岁宝宝智力发育迟缓怎么办 学车体检听力没过怎么办 学车体检听力不过关怎么办 离职体检发现听力有问题怎么办 买的二手房土地证没过户怎么办 b2扣了9分怎么办 上海网约车车证怎么办