什么是数据类型?
数据类型就是存储不同大小数据的容器。
整型
整型最常见的就是 int,占 4 个字节,即 4 * 8 = 32 比特,可以表达的整数个数为 ,由于包括负数,0, 和正数,实际表示范围为 ~,如果是 unsigned int,即没有负数区间,表示范围为0 ~。
cout << sizeof(int) << endl;
输出:
4
当 int 无法满足存储需要时,我们需要更大的数据类型 long long,占 8 个字节。
1.当题目中数据范围明显超出 int,比如 1000000 个数字,每个数字范围都是 int,求和。
2.比较隐晦,比如 20 的阶乘,结果 1 * 2 * 3 * …… * 20
。
浮点型
float 占 4 字节,保留有效位数 7 位,double 占 8 字节,保留有效位数 16 位。一般在算法竞赛中,我们都使用 double。
保留指定小数位数:需要引入库 #include<iomanip>
const double PI = 3.14159265358;
cout << PI << endl; //默认显示6位有效数字
cout << fixed << setprecision(6) << PI << endl;
输出:
3.14159
3.141593
[info] 注意
必须加 fixed,否则实际输出位数可能会小于指定保留位数。
字符型
字符常量是由单个字符组成,所有字符采用 ASCII 编码,通用 ASCII 编码共有 128 个字符。在程序中通常用一对单引号将单个字符括起来表示一个字符常量。如:'a','0','A'。
ASCII 码表:
常用转义字符:
cout << "欢迎来到图灵之星编程\n";
cout << "好好学习\t天天向上\n";
cout << "输出一个反斜杠\\";
输出:
欢迎来到图灵之星编程
好好学习 天天向上
输出一个反斜杠\
数据存储单位
类型转换
C++ 提供了两种类型转换方式:隐式转换和显式转换。
- 隐式转换:通过将一种类型的变量直接赋值给另一种类型的变量,此时被赋值的变量就相当于是由原本数据类型转化为新数据类型后的值。此时,编译器会自动将一种类型转换为另一种类型,无需额外的代码。
- 显式转换:使用强制类型转换运算符来将一种类型的变量强制转换为另一种类型的变量。此时,我们需要在变量名前加上括号,并在括号内指定要转换的目标类型。例如,如果我们要把一个
double
类型的变量(假设这个变量叫d
)转换为int
类型的变量,此时表示变量d
在被转化类型后的结果的表达式为:(int) d
。需要注意的是,这个操作只能得到转换后的值,并不会改变原本变量的值,也就是说,此时变量d
的数据类型并没有发生改变,仍然为double
类型。
int main() {
// 隐式转换
int a = 5;
double b = a; // int转double
// 显式转换
double c = 3.14;
int d = (int)c; // double转int,结果为3
//int d=int(c); //另外一种写法
注意:从浮点型转换为整型时,小数部分会被截断,而不是四舍五入。
向上向下取整
问题一:汽水3.5元一瓶,一共有10元钱,可以买多少瓶汽水?
问题二:一盒铅笔(不可拆分售卖)有8支,现在需要20支铅笔,需要买多少盒?
在这一类问题中,需要做除法运算,但是当除数与被除数不是整除关系时,需要的结果会向较小或较大整数取值,我们称为计算结果向下取整或向上取整。
- 问题一中向下取整的写法:
cout<<floor(10/3.5)
; - 问题二中向上取整的写法:
cout<<ceil(20.0/8);
floor和ceil的返回值都是浮点数,所以通过不保留小数的方式得到整数值。