本文主要讲解了C++的内置数据类型、内置数据类型的字面值、枚举类型和联合类型,位操作符。
一、数据类型
1.C++的基本内置数据类型有char、wchar_t、int、short、long、long long、float、double、bool、long double,其中,int、short、long、long long又分为signed和unsigned。
对于基本内置数据类型需要掌握的要点为两点:
(1) 这些数据类型在内存中所占的大小,经过测试,我发现在不同的操作系统中,内置数据类型所占的空间大小是不一样的,就windows系统来说,
char 1字节
wchar_t 2字节
short 2字节
int 4字节
long 4字节
long long 8字节
float 4字节
double 8字节
long double 8字节
bool 1字节
掌握数据类型在内存中所占的大小对于在内存中直接用指针访问变量特别有用。
(2) 基本内置数据类型的初始化
a.声明为全局变量,默认初始化为0
b.声明为局部变量,在使用变量前必须初始化,无默认初始化
c. int i(1024); 直接初始化
int i = 1024; 复制初始化
这两种初始化在内置数据类型的初始化时,差别不大,但是在类型类的初始化时,这个差别会凸现出来,直接初始化调用类的构造函数,复制初始化调用类的复制构造函数。
2. 字面值常量
像42,45.2,false,“I am liu”这样的值被称为字面值常量。
在这里需要重点掌握的时字符串字面值。
a. "test" = 't' ,'e','s','t','\0'
b.字符串字面值的连接:
cout<<"a multi-line "
"string literal "
"using concatenation"
<<endl;
等同于
cout << " a mult-line ""string literal ""using concatenation"<<endl;
等同于
cout <<" a mult-line " "string literal " "using concatenation"<<endl;
输出结果: a multi-line string literal using concatenation
而连接字符串字面值和宽字符串字面值的结果不确定,可能引起系统崩溃,也可能编译的时候不能通过。我在vs2005下测试了一下,编译不能通过。
cout <<"I am "L"teacher"<<endl;
c.字符串字面值和string
string s1="Hello";//ok
string s2 = s1+"world";//ok
string s3 = "Hello"+"World";//error
string s4 = "world"+s1;//error 这种情况在C++ primer这本书中是错误,但我在实际使用时,在VS2005中,这种表达式是正确的,比较奇怪,或许在linux下这样使用不行。
3. 枚举变量
a.枚举变量的定义:
enum open_modes{open,close,append};
open默认初始化为0,close,append自动递增1;
也可
enum open_modes{open=3,close,append};
open初始化为3,close=4,append=5;
也可
enum open_modes{open=3,close=3,append};
open=3,cloase=3,append=4;
注意:枚举类型中值得默认初始化不管是定义在全局还是定义在局部,都会自动初始化。
枚举变量部不安时全局变量还是局部变量,都会默认自动初始化为0。
b.枚举变量的赋值
open_modes state=open;//ok
state=4;//error
open_modes state1 = state;//ok
只能用枚举变量或枚举成员对枚举变量赋值。
4.类类型
特殊的类类型:union 联合
可以有多个类数据成员,但是只允许其中某一个雷数据成员有值,节省了内存空基纳。
a.定义:
union takeValue//若无takeValue名字,则是匿名联合
{
char cval;
int ival;
double dval;
};
b.数据成员不能为引用类型、类类型、静态类型。
c.联合可嵌套
d.联合的使用:
takeValue ptr;
ptr.ival=0;
takeValue* pointer = &ptr;
ptr->dval = 5.0;
二、位操作符
1.>>和<<
<<操作符,右边插入0补位
>>操作符,左边插入0或1补位,如果是无符号数,插入0补位,如果是有符号数,插入符号位的副本或0值补位。
2.^按位异或
如果两个操作数的相同位上的数相同则为1,不同则为0。