编程在很大程度上都是在进行数据的处理,数据的处理方法有很多,各式各样的算法、数据结构等。数据的类型也有很多,这里就c++所涉及的基本数据进行一些总结。
把信息存储于计算机,一般都是存储在变量中,当然变量贯穿在整个程序中,通过变量的组合可以组成结构、类等,数据的传递也是通过变量进行的,所以说变量是数据的载体,不同的数据类型存储在不同类型的变量中。
1. 变量命名
这里就不多介绍,命名规则都是基础的东西。主要说几点常用的吧:
全局常量首字母大写
类中数据变量后缀加“_”
2. 变量类型 整型
C++中总的有11种整型:short 、int、long、long long、unsigned short 、unsigned int、unsigned long、unsigned long long、char、unsigned char、signed 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字节无符号数范围为:0—216
Short类型的变量适合存储大型整数数组,节省内存,其他情况下默认为int型。
对于常量的整型:一般用后缀来申明,除非数值太大超出int范围,否则默认为int。
对于char类型,是另外一种整型,能表示计算机所有的基本符号,一般系统字符数≤128,所以用一个字符就可以表示,可以把char当作比short更小的整型,存储的时候转换为字符对应的整数,输出的时候转换为对应的字符进行输出。
wchar_t类型,2字节,用wcin,wcout,进行输入输出,当然需要加前缀L。显示一个字符可以用cout.put(‘!’)。
Char默认既不是无符号型又不是有符号型,需要进行显式的定义,无符号数0—255,有符号数-128—127。
C++11新增了新的类型:char16_t、char32_t,都是无符号整型用前缀u、U表示
这里简单说一下bool型,布尔变量值为true和false,通过提升转换可以变成1,0。任何数字值和指针值均可隐式的转换为布尔值,常用作while判断表达式。
Const常量:一般首字母大写,必须赋初值,否则导致不确定结果。
3. 浮点数
能表示带小数部分的数值,当数值很大,无法用long进行表示,或者当数值很小时,用浮点数进行表示。有两种表示法:标准小数点和科学计数法(e/E来表示)。指数范围至少:-37—37。
浮点数类型有:float(>32位)、double(>48位,通常为64位)、longdouble(80、96、128位)。对于float,系统一般保证6位有效数字,double,系统一般保证15位有效数字。
对于浮点常量,用f,F后缀表示float,一般默认为double,用后缀L表示long double。
4. 类型转换
(1). 初始化和赋值时的转换
从小类型转换为大类型,没有问题,反之则会降低精度。
Long转换为short,如果值超出short的范围,则只复制右边的字节。
Float转换为int,小数部分丢失,如果超出int范围,结果是不确定的。
(2). {}初始化列表的方式
这种转换则更加严格,只有当目标变量能正确存储赋给它的值时才能转换,否则不能转换。如float不能转换为int,int则可能转换为float。
(3). 表达式中的转换
表达式中的转换分为自动转换和不同类型出现时转换。
自动转换:出现时便转换。整型提升转换:short、char、unsigned char,signed char、bool类型自动转换为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转换为char,long转换为double
用户定义转换:(类声明实现)可用关键字explicit关闭隐式转换
(5). 强制转换
强制转换不会修改变量本身。
4个强制转换运算符
Dynamic_cast,基指针可以指向派生类对象,反之则赋空指针。
Const_cast 修改值的类型为const或volatile,但其他类型必须完全相同
(对const的总结将写在另一篇文章里)
Static_cast两个类型可以进行合法的隐式转换时,才可以用。
Reintrprect_cast