什么是数据类型?

数据类型就是存储不同大小数字的容器。

整型

整型最常见的就是 int,占 4 个字节,即 4 * 8 = 32 比特,可以表达的整数个数为 2322^{32},由于包括负数,0,和正数,实际表示范围为 - 2312^{31} ~ 2312^{31}-1,如果是 unsigned int,即没有负数区间,表示范围为 0 ~2322^{32}-1。(暂时我们姑且这么认为,后面会讲到原码、反码和补码原理)。

cout << sizeof(123) << " " << sizeof(int) << endl;

输出:
4 4

然而,当 int 无法满足存储需要时,我们需要更大的数据类型 long long,占 8 个字节。

cout << sizeof(123456789123456789) << " " << sizeof(long long) << endl;

输出:
8 8

如果我们要将 123 这个整数声明为 long long 类型,可以加上后缀 ll 或 LL。

cout << sizeof(123ll) << " " << sizeof(456LL) << endl;

输出:
8 8

在实际编程过程中,如果需要多次使用 long long,我们可以通过 typedef 关键字将 long long 重命名为 LL。(注意:程序中最好不要出现小写 l,容易和数字 1 混淆)。

#include <iostream>
using namespace std;

typedef long long LL;

int main() {

    LL a = 123;
    cout << a << " " << sizeof(a) << endl;

    return 0;
}

输出:
123 8

那么,我们什么时候需要用到 long long 呢?比如:

1.当题目中数据范围明显超出 int,比如 1000000 个数字,每个数字范围都是 int,求和。

2.比较隐晦,比如 20 的阶乘,结果 1 * 2 * 3 * …… * 20

如果不确定,直接开 long long 空间。(大多数情况对结果没有影响,但是当涉及到位运算时候可能对结果有影响,需要事前评估一下)

什么是 short?long 和 long long 有什么区别?

在C++ primer,或者c++标准书中是这样规定的:sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long) 它并没有回答各个数据类型的具体长度,而是由编译器自行决定。

在我们考试的系统中,short 占 2 个字节,long 占 8 个字节。(大多数书上写的是 4 字节,这并不适用于 NOI Linux2.0 系统)

简而言之我们平时用的电脑是 Windows64 位;

我们所接触的大部分 OJ 都是 Linux64 位;

32 位系统因为随着时代的发展,电子设备内存越来越大,基本已经很少见了!

浮点型

float 占 4 字节,保留有效位数 7 位,double 占 8 字节,保留有效位数 16 位。一般在算法竞赛中,我们都使用 double。

浮点型默认为 double 类型,当然也可以通过后缀 f、F、L 改变类型。

cout << sizeof(1.23) << endl;
cout << sizeof(1.23f) << endl;
cout << sizeof(1.23F) << endl;
cout << sizeof(1.23L) << endl;

输出:
8
4
4
16

保留指定小数位数:需要引入库 #include <iomanip>

const double PI = 3.14;

cout << PI << endl;
cout << setprecision(6) << PI << endl;
cout << setprecision(6) << 3.14159265358 << endl;

cout << fixed << setprecision(6) << PI << endl;

输出:
3.14
3.14
3.14159
3.140000

注意:

1.必须加 fixed,否则实际输出位数可能会小于指定保留位数。

2.以上所有格式化控制符只对紧跟在其后的数据有作用

布尔类型

布尔变量声明和赋值:

bool a;
bool a = true, b = false;
bool a = 0, b = 1;

输出布尔类型量:

如果值为真 (true),输出 1 ,如果值为假 (false),输出 0。

cout << true << " " << false;  //输出:1 0
bool a = true, b = false;
cout << a << " " << b;    //输出:1 0

布尔类型与其它类型的转换:

cout << bool(0.2) << endl;    //输出:1
bool a = -1, b = 0;
cout << a << " " << b;    //输出:1 0
int c = bool(3), d = false;
cout << c << " " << d << endl;    //输出1 0

关系运算

逻辑运算

逻辑运算真值表:

image-20240206125452007

判断一个数是否是另一个数的倍数:

优先级:

字符型

字符常量是由单个字符组成,所有字符采用 ASCII 编码,通用 ASCII 编码共有 128 个字符。在程序中通常用一对单引号将单个字符括起来表示一个字符常量。如:'a','0','A'。

ASCII 码表:

常用转义字符:

cout << "我是\n黑猫\t老师\n";
cout << "很高兴\x0A认识\x09你\n";
cout << "输出一个反斜杠\\";

输出:
我是
黑猫    老师
很高兴
认识    你
输出一个反斜杠\

数据类型隐式转换

隐式转换是指在编程语言中,由编译器自动执行的类型转换过程,而无需显式指定。这种转换是为了保持操作的一致性,使不同类型的数据能够在一些特定的上下文中进行运算或操作。隐式转换通常涉及到较小范围数据类型较大范围数据类型的转换,以避免数据丢失或提高精度。

第3次作业

results matching ""

    No results matching ""