C++关于变量数据类型的总结



编程在很大程度上都是在进行数据的处理,数据的处理方法有很多,各式各样的算法、数据结构等。数据的类型也有很多,这里就c++所涉及的基本数据进行一些总结。

把信息存储于计算机,一般都是存储在变量中,当然变量贯穿在整个程序中,通过变量的组合可以组成结构、类等,数据的传递也是通过变量进行的,所以说变量是数据的载体,不同的数据类型存储在不同类型的变量中。

1.       变量命名

这里就不多介绍,命名规则都是基础的东西。主要说几点常用的吧:

全局常量首字母大写

类中数据变量后缀加“_”

2.       变量类型 整型

C++中总的有11种整型:short intlonglong longunsigned short unsigned intunsigned longunsigned long longcharunsigned charsigned char。下面进行总结。

 

首先8位(bit=1字节(byte

short:至少16                                                                       Windows中:2字节

int:大于等于short小于等于long                                      Windows中:4字节

long:至少32位大于等于int                                                Windows中:4字节

long long:至少64位,大于等于long                               Windows中:8字节

在默认情况下,以上整型都是为有符号整型,4字节可以表示的范围为:-215—215-1,对于4字节无符号数范围为:0216

 

Short类型的变量适合存储大型整数数组,节省内存,其他情况下默认为int型。

对于常量的整型:一般用后缀来申明,除非数值太大超出int范围,否则默认为int

 

对于char类型,是另外一种整型,能表示计算机所有的基本符号,一般系统字符数≤128,所以用一个字符就可以表示,可以把char当作比short更小的整型,存储的时候转换为字符对应的整数,输出的时候转换为对应的字符进行输出。

wchar_t类型,2字节,wcinwcout,进行输入输出,当然需要加前缀L。显示一个字符可以用cout.put(‘!’)

Char默认既不是无符号型又不是有符号型,需要进行显式的定义,无符号数0255,有符号数-128—127

C++11新增了新的类型:char16_tchar32_t,都是无符号整型用前缀uU表示

 

这里简单说一下bool型,布尔变量值为truefalse,通过提升转换可以变成10。任何数字值和指针值均可隐式的转换为布尔值,常用作while判断表达式。

Const常量:一般首字母大写,必须赋初值,否则导致不确定结果。

3.        浮点数

能表示带小数部分的数值,当数值很大,无法用long进行表示,或者当数值很小时,用浮点数进行表示。有两种表示法:标准小数点和科学计数法(e/E来表示)。指数范围至少:-37—37

浮点数类型有:float>32位)、double>48位,通常为64位)、longdouble8096128位)。对于float,系统一般保证6位有效数字,double,系统一般保证15位有效数字。

对于浮点常量,用f,F后缀表示float,一般默认为double,用后缀L表示long double

4.        类型转换

(1). 初始化和赋值时的转换

从小类型转换为大类型,没有问题,反之则会降低精度。

Long转换为short,如果值超出short的范围,则只复制右边的字节。

Float转换为int,小数部分丢失,如果超出int范围,结果是不确定的。

(2). {}初始化列表的方式

这种转换则更加严格,只有当目标变量能正确存储赋给它的值时才能转换,否则不能转换。如float不能转换为intint则可能转换为float

(3). 表达式中的转换

表达式中的转换分为自动转换和不同类型出现时转换。

自动转换:出现时便转换。整型提升转换:shortcharunsigned charsigned charbool类型自动转换为int型。当short长度小于int时,unsigned short转换为int,当short长度等于int时,unsigned short转换为unsigned int。而wchar_t转换为第一个宽度足够存储wchar_t类型的整型。

 

不同类型出现时转换:

long double,另一个转换为longdouble

否则有double,另一个转换为double

否则有float,另一个转换为float

否则都是整型,则整型提升。

 

有符号和无符号之间:

无符号级别高于有符号,则有符号转换为无符号

有符号可以包含无符号长度,则无符号数转换为有符号数

否则均转换为有符号类型的无符号版本。

(4). 函数或类中传递参数的转换级别由高到低分别如下:

完全匹配,不用转换

整体提升:附加float转换为double

标准转换:int转换为charlong转换为double

用户定义转换:(类声明实现)可用关键字explicit关闭隐式转换

(5). 强制转换

强制转换不会修改变量本身。

4个强制转换运算符

Dynamic_cast,基指针可以指向派生类对象,反之则赋空指针。

Const_cast 修改值的类型为constvolatile,但其他类型必须完全相同

(对const的总结将写在另一篇文章里)

Static_cast两个类型可以进行合法的隐式转换时,才可以用。

Reintrprect_cast

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值