最近复习C++相关内容,决定在这里记录自己复习的过程。 以前写过部分文字,但是没有坚持连续写,因此学完后
基本又忘光啦,主要是没有实践,这一次决定自学完后,在这里在复习一遍增强自己的记忆和理解程度。
一、基本内置类型
C++语言内置了一些数据类型,主要有两大类: 整型和浮点型。
整型又有: bool型、char型、wchar_t型、short型,int型,long int型。
浮点型有: float型, double型、long double型(扩展双精度型)。
我们知道不同的数据类型决定了不同的内存占用bit和可以进行的操作。
1、bool型
bool型是C++语言扩展的类型,在C语言里面是没有bool类型的,其取值为两个值: false 和 true。
值得注意的是:bool类型的两个取值都是用小写的字母表示的,这一点需要注意。
在C++中如果一个bool型的对象取值为 false,就表示逻辑结果为假; 如果bool型对象的取值为true
就表示逻辑结果为真。
Exp:
bool bVar; bVar = false; if(bVar) { std::cout<<"It is true"<<std::endl; } else { std::cout<<"It is false"<<std::endl; }
这样就会执行 else分支的语句,输出: It is false。
C++继承了C语言的特性: 如果一个表达式的值为零,则逻辑结果为假; 如果一个表达式的值非零,则逻辑结果
为真。
要点1: 在C++中有些表达式其逻辑结果可能不是那么容易判定为0还是非0, 这样就很难判定其逻辑结果的真假,
需要引起注意。
例如: std::cin<<x; 如果输入流读到文件的结尾,那么返回逻辑结果就为假, 如果还没有读到文件的结尾,那么
其返回结果就为真。
要点2: bool类型变量在内存中需要1个字节表示。
bool型变量可以进行与、或、非的逻辑运算,这些在运算符的时候讨论。
2、字符型
C++提供两种不同位宽的字符型类型:char、wchar_t
char型占用8bit, wchar_t占用16bit(用于表示宽字符集的字符)。
char型字符字面值是用单引号引起来的字符,如:
‘A‘, ‘b‘, ‘"‘(双引号)。
wchar_t型字符字面值也是用单引号引起来的字符,但是需要在前面加上字幕L, 如:
L‘B‘, L‘C‘, L‘b‘, L‘"‘(双引号)。
C++和C语言一样提供了一些其他的方式来表示字符字面值。 主要有三种方式: 利用8进制的数字来表示
字符字面值、利用16进制的数字表示字符字面值、转义字符序列。
A: 8进制表示字符字面值
用反斜杠后面跟上8进制数字表示字符字面值, 如
\7 响铃符 、 \12 换行符 、 \40 空格符等
B:16进制表示字符字面值
反斜杠后面跟上x或者X,然后在跟上16进制数字表示字符字面值, 如:
\x7 响铃符、 \xC 换行符、 \x28 空格符等
C:转义字符序列
在C++语言中,有些字符具有特殊的意义,就不能用单引号来表示,例如不可打印字符、反斜杠、控制字符、
单引号、双引号、疑问号、换行符、水平制表符、垂直制表符、回车符、进纸符等。
\n 换行符
\t 水平制表符
\t 垂直制表符
\b 退格控制符
\r 回车符
\f 进纸符
\a 报警符,响铃符
\\ 反斜杠
\? 疑问符
\‘ 单引号
\" 双引号
3、整数型
short int、 int、和 long int型 。其中short int 、long int 可以省略int,用 short 和long表示。
short: 最小占用16bit
int:最小占用16bit
long:最小占用32bit
这这三种类型占用的位宽由系统决定, 而且目前一般int是 32bit宽度, 因此在设计程序的时候,不能
假设占用的bit数,而要用sizeof 操作符来求解占用的位宽。
整数型的字面值有三种表示方式: 十进制、八进制、十六进制。
例如: 20 十进制
024 八进制 ,前面用前导0开始表示这是一个八进制整数字面值
0x14 十六进制,前面用前导0x或者0X开始表示这是一个十六进制整数字面值。
整数型数有正数和负数之分; 能表示大于、小于和等于0的整数型称为有符号整型,用signed表示;
不能表示小于0的整数类型为无符号型(表示的数大于或者等于0),用unsigned表示。
默认整数字面值是有符号的int型, 可以在整数字面值后面加上修饰的字符改变整数字面值的类型。
可以添加的修饰符有: u/U 、 l/L . 例如:
20u: 无符号int型,
20L: 有符号长整型
20UL: 无符号长整型
要注意的是: 整数字面值没有short类型,这个需要注意。
4、字符串字面值
连续的字符序列在C++中有一个叫法: 字符串字面值。 字符串字面值就是用双引号括起来的连续字符序列。
Exp:
字符串: "I am a C++ fresh man"
上面就是一个字符串字面值。
C++的字符串字面值继承了C语言的特性,会自动在字符串的字符序列后面加上一个 ‘\0‘ 的字符,因此在
内存中会多占用1个字节。
对于wchar_t 类型的字符串字面值同样会占用对一个字符需要的空间,就是: 2byte。
字符串中有一个特别需要注意的字符就是: %,这个字符需要引起大家的注意。
如果你是调用C语言的标准库printf()函数输出的话,那么在输出"%%" 时只会输
出一个 %; 而如果用cout的话,则会输出两个 %%。
要点: 字符串字面值的连接, 两个以空格、制表符、换行符分隔的两个字符串字面值会连接成一个字符串字面值。
例如:
std::cout<<"abcdefg"
"12345678"
"volcanol";
这个输出就相当于:
std::cout<<"abcdefg""12345678""volcanol";
也相当于:
std::cout<<"abcdefg12345678volcanol";
这个是比较特殊的一个特性,在C语言中也可以这样,一般用的比较少。
5、浮点型
浮点型有三种: float、double和long double。三种类型的区别是占用的有效位数不一样。
float 32bit, 有效位为6位小数
double 64bit, 有效位为10位小数
long 64bit, 最小有效位为10位小数
浮点型字面值有两种表示方法: 十进制和科学计数法。
1. 十进制的double型字面值
1.e0 科学计数法的double型字面值。
默认的浮点数字面值为double类型。如果要显示的设置为float型,就需要在字面值后面加上一个f或者F。
例如:
3.14F, 2.f 都是float型的浮点型字面值。
要点: 也许大家注意到了上面的1. 和 2.f , 这里如果出现了小数点,即使后面没有小数那么也是浮点型
数据,这一点通常大家可能会遗忘。
暂时说这么多,待续......