南宁手机建站模板/公司企业网站建设方案
C++数据类型转换详解
- 整型int
- 字符型:char
- 浮点数型flaot
- 类型转化
- 自动转换
- 强制转换
- C++中auto声明
- 转换中潜在的问题
C++内置的数据类型可以分为两个大类,整形和浮点数型,字符型可以归纳到整形中,通过有符号、无符号;长、短;单、双精度等修饰获得多种类型。
整型int
术语(width)宽度用于描述存储整数时使用的内存量。
C++标准中:
- char: 8 位,1个字节
- short 至少16位,2个字节
- int 至少和short一样长,一般为32位,4个字节
- long 至少32位,至少与int一样长
- long long 至少64位,且至少与long一样长
采用运算符sizeof可以获得每种类型的长度:
- 第一种使用格式:sizeof int;
- 第二中使用格式:sizeof(int)
此外,头文件climits定义了符号常量来表示类型的限制:
- CHAR_BIT :char的位数
- CHAR_MAX:char的最大值
- CHAR_MIN:char的最小值
- SCHAR_MAX:signed char的最大值
- SCHAR_MIN:singned char的最小值
- UCHAR_MAX:unsinged char的最大值
- INT_MAX:int的最大值
- INT_MIN:int的最小值
等,还有其他能限制,调用格式相同,未全部列出;
字符型:char
char类型是专为存储字符而设计的类型,为便于存储,每个字符编码为一个整数,常见的就是ASCII字符集,采用一个字节来表示。
所以,char也可以看做一个比short还短的整型,小整数,如0~127,可以用char型来存储,减少内存消耗。
在C++中,cin、cout会自动完成转换,当输入字符时,会自动转换为数值存储,当输出字符时,会自动将数值转换为字符。例如cin>>x,输入端输入’M’,x存储的值是77,而当输出cout<<x时,77会自动转换为’M’。这是因为cin、cout有对应的实现方法。
char与整数的转换:
int a = ch;
char ch = a;
浮点数型flaot
浮点数提出的原因:
(1)两个整数之间的值,整数无法表示,整数代表离散,浮点数可以代表连续
(2)整数的值非常大时,直接用整数表示很困难
浮点数采用两部分来存储:带小数的数值;放缩因子。
浮点数三个类型:
- float :有效数值至少32位,一般32位
- double: 至少与float一样长,一般64位
- long double: 至少与double一样长,一般为128位
浮点数两种表示方法:
- 带小数点:3.14
- E表示法:3.14E1
缺点:浮点数运算比整形慢,且精度会降低。
类型转化
自动转换
C++自动执行很多类型转换:
- 1 赋值转换:a=b;int a=1.3
将一种算术类型的值赋给另一种算术类型的变量时,C++将对值进行转换; - 2表达式转换:c = a+b;
表达式中包含不同的类型时,C++将对值进行转换; - 3参数传递转换,fun(int a),调用fun(b)
将参数传递给函数时,C++将对值进行转换。
强制转换
C++还允许强制类型转换机制显示第进行类型转换。
两种常用的转换格式:
- 1 C风格:(typeName) value,例如(int)a
- 2C++风格:typeName(value),例如int(a)
调用转换函数:
static_cast<long> (thon) //转化为长整型
---
static_cast<typeName> (value) //推广为一般表达式
C++中auto声明
C++提供了一个新工具,让编译器能够根据初始值的类型推断变量的类型,在初始化声明中如果使用了auto关键字,而不指定类型,编译器将把变量的类型设置成与初始值相同:
auto x=0.0
auto y = 0
转换中潜在的问题
- 1 将较大的浮点数类型转换为较小的浮点数类型,如将double转换为float:
精度(有效数位)降低,值可能超出取值范围,在这中情况下,结果将不确定 - 2将浮点型转化为整型:
小数的值将丢失,原来的值可能超过目标类型的取值范围,在这种情况下,结果将是不确定的; - 3 将较大的整数型转化为较小的整数型,如long转化为short:
原来的值超过目标类型的取值范围,通常只复制右边的字节。