c++中类型转换和类型提升的区别?
答案:3 悬赏:0
解决时间 2021-02-20 11:50
- 提问者网友:控制庸俗
- 2021-02-19 18:20
c++中类型转换和类型提升的区别?
最佳答案
- 二级知识专家网友:狠傷凤凰
- 2021-02-19 18:54
提升是转换的一种
提升的概念是比较高级也比较模糊的
当在函数重载规则中说的类型提升是指
char to int float to double 等短到长的提升
在面向对象中是构造函数的提升,如
string str = "the quick..."
提升的概念是比较高级也比较模糊的
当在函数重载规则中说的类型提升是指
char to int float to double 等短到长的提升
在面向对象中是构造函数的提升,如
string str = "the quick..."
全部回答
- 1楼网友:废途浑身病态
- 2021-02-19 20:44
Memory中存储的是补码,是根据存入的具体数据的值进行转换为二进制
后的形式,如果超过该数据类型范围则不知道存的形式是什么了,这个
应该是编译器相关的,对越界数的处理方式;(无论存入的时候是用什
么进制表示的,在这里注意+/-单目运算符的作用)
无论要做什么运算都要先看这个数存入内存是什么样子的;
类型提升/截断的时候都是对内存中数据的操作,提升的时候就是需要
进行扩位:对无符号数扩位的时候直接把扩出的位上补零即可(因为unsigned都是正数);有符号
数进行扩位,则进行符号位扩展(sign extension)如果是整数即原最高位
是零则补零,如果是负数即原最高位是1则全补1;进行数据截断的时候是
从低位开始数位数然后截断,这里注意我们使用的一般都是小端机(little Endian)
类型强制转换其实也是对内存中存储的数据的一种呈现方式而已,如:内存
中是8000的时候(即1000 0000 0000 0000),如果用unsigned short int则打印出
来的是2的15次方,如果用short int则打印出来是负2的16次方
在进行算术运算和双目的位运算的时候如果操作数数据类型不一致,首先进
行数据 Arithmetical Conversion类型提升(其实提升就是进行扩位,然后把扩位后的内存二进制代码强制转为某种数据类型之后进行打印),然后 才开始运算
在进行单目位运算的时候,首先进行整型提升,然后开始运算Integer Promotion
- 2楼网友:浪女动了心
- 2021-02-19 20:28
转换分为显式转换和隐式转换;显式转换分为C风格显式转换与C++风格显式转换。隐式转换在维持值不变的转换,也有不能维持值不变的转换。前者常被称为提升。详细请见于Bjarne Stroustrup的《C++程序设计语言(特别版)》附录C.6 “隐式类型转换”中的规则性、定义性文字
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯