C++ 数据类型总结

一、 整型(Integer Types)

1. int 类型

  • 大小与范围:

    • 通常占用 4 字节 (Byte),即 32 比特 (bit)。
    • 带符号 (signed int) 范围:2312311-2^{31} \sim 2^{31}-1 (约 ±2.14×109\pm 2.14 \times 10^9)。
    • 无符号 (unsigned int) 范围:023210 \sim 2^{32}-1 (约 4.29×1094.29 \times 10^9)。
  • 最大/最小值的表示 (32位):

类型 十六进制 (HEX) 十进制 (DEC)
int 最大值 7FFFFFFF 2,147,483,6472,147,483,647
unsigned int 最大值 FFFFFFFF 4,294,967,2954,294,967,295
  • sizeof 运算符示例:
cout << sizeof(123) << " " << sizeof(int) << endl;
// 输出: 4 4

2. long long 类型

  • 大小: 通常占用 8 字节
  • 声明 long long 常量: 整数常量后加后缀 llLL
cout << sizeof(123456789123456789) << " " << sizeof(long long) << endl;
// 输出: 8 8

cout << sizeof(123ll) << " " << sizeof(456LL) << endl;
// 输出: 8 8
  • 使用 typedef 重命名:
typedef long long LL;
// LL a = 123;
// cout << a << " " << sizeof(a) << endl; // 输出: 123 8
  • 使用场景:
    1. 数据范围明显超出 int (超过 2×1092 \times 10^9)。
    2. 大数求和可能导致溢出 (如 10610^6int 范围的数字求和)。
    3. 计算较大阶乘 (如 20!20! )。

3. shortlong 类型

  • C++ 标准规定: $\text{sizeof}(\text{short}) \le \text{sizeof}(\text{int}) \le \text{sizeof}(\text{long}) \le \text{sizeof}(\text{long long})$。具体长度由编译器决定。

  • 考试系统约定 (NOI Linux 2.0): short 占 2 字节,long 占 8 字节。

  • long 类型在不同系统下的字节数:

操作系统 long 字节数 数值范围
Windows (32/64位) 4B 2312311-2^{31} \sim 2^{31}-1
Linux (64位) 8B 2632631-2^{63} \sim 2^{63}-1

二、 浮点型(Floating-Point Types)

名称 数据类型 字节数 有效位数 数值范围
单精度浮点数 float 4B 6-7位 ±3.4×1038\pm 3.4 \times 10^{38} 左右
双精度浮点数 double 8B 15-16位 ±1.7×10308\pm 1.7 \times 10^{308} 左右
  • 常用: 编程中推荐使用精度更高的 double

1. 科学计数法表示

  • 形式:[+|-]Digits[.Digits][e|E][+|-]Digits
  • 示例:1.23E10 (1.23×10101.23 \times 10^{10}), 0.23E-4 (0.23×1040.23 \times 10^{-4})

2. 类型后缀

  • 浮点型常量默认double 类型。
  • 后缀 fFfloat 类型 (如 1.23f)。
  • 后缀 Llong double 类型 (如 45.e+23L)。
cout << sizeof(1.23) << endl;   // 8 (默认 double)
cout << sizeof(1.23f) << endl;  // 4

3. 保留指定小数位数(格式化输出)

  • 需要引入库 #include<iomanip>
  • 使用 setprecision(n) 设置总共显示的有效数字位数。
  • 使用 fixedsetprecision(n) 才能设置固定保留 nn 位小数。
// 示例(假设 PI = 3.14159265358)
cout << PI << endl;                      // 输出: 3.14
cout << setprecision(6) << PI << endl;  // 输出: 3.14
cout << fixed << setprecision(6) << PI << endl; // 输出: 3.140000

三、 布尔类型(Boolean Type)

名称 数据类型 字节数 数值范围
布尔 bool 1B (通常) truefalse

1. 声明和赋值

  • 可以直接赋值为 truefalse
  • 整数赋值:非 0 转换为 true0 转换为 false
bool a = true, b = false;
bool c = 1, d = 0; // c为true, d为false

2. 输出

  • 布尔值输出时被转换为整数:true 输出 1false 输出 0
cout << true << " " << false; // 输出: 1 0

C++ 关系运算 (Relational Operators)

关系运算符用于比较数值的大小关系,表达式的值是布尔值truefalse)。

大小关系 数学符号 C++ 关系运算符
小于 < <
大于 > >
大于等于 \ge >=
小于等于 \le <=
等于 == ==
不等于 \ne !=

关系运算表达式示例

表达式 结果 (布尔值) 结果 (整数值) 解释
1 > 2 false 0 1 不大于 2
1 < 2 true 1 1 小于 2
1 == 2 false 0 1 不等于 2
2 == 2 true 1 2 等于 2
1 + 2 == 3 3 等于 3
2.8 * 3.5 >= 3 9.839.8 \ge 3
2 <= 2 2 小于等于 2
1 != 2 1 不等于 2
1 <= 2 1 小于等于 2
2 != 2 false 0 2 不等于 2 是假的
(1 < 2) == false true == falsefalse
(a = 3) == 3 true 1 先赋值 a=3a=3,然后判断 3==33 == 3

C++ 逻辑运算 (Logical Operators)

逻辑运算符用于组合或否定布尔值(或关系表达式),表达式的值是布尔值truefalse)。

含义 逻辑运算符
逻辑与 &&
逻辑或 ||
逻辑非 !

逻辑运算真值表

A B A && B (逻辑与) A || B (逻辑或) !A (逻辑非)
1 (true) 1 (true) 1 1 0
0 (false) 0
0 (false) 1 (true) 1
0 (false) 0
  • 注: 表中 1 表示真(true),0 表示假(false)。

逻辑运算表达式示例

目的 C++ 表达式 解释
判断一个数 aa 是否满足 2<a52 < a \le 5 a > 2 && a <= 5 aa 必须同时大于 2 并且小于等于 5
判断一个数是否是偶数 5 的倍数 `a % 2 == 0
判断一个数是否不是偶数 !(a % 2 == 0) aa 是偶数的结果进行取反

倍数判断

对于整数 a,ba, b:

  • aabb 的倍数 \Leftrightarrow bbaa 的因数 \Leftrightarrow aa 能被 bb 整除 \Leftrightarrow a % b == 0

运算符优先级(部分)

在 C++ 中,运算符的优先级决定了表达式中运算执行的顺序。下表列出了一些常用运算符的优先级(从高到低):

优先级 运算符 类型 示例
最高 ! 单目运算符 (逻辑非) !a
较高 *, /, % 双目运算符 (乘、除、取模) a * b
中等 +, - 双目运算符 (加、减) a + b
>, >=, <, <= 关系运算符 a > b
较低 ==, != 关系运算符 (等于、不等于) a == b
&& 逻辑运算符 (逻辑与) a && b
**` `**
最低 =, +=, -= 赋值运算符 a = 3

总结: 逻辑非 ! 的优先级很高,乘除取模的优先级高于加减,关系运算符的优先级高于逻辑运算符。 在复杂的表达式中,不确定时建议使用括号 () 来明确运算顺序。

四、 关系运算与转义字符

1. 常用转义字符

名称 字符形式 作用
换行 (NewLine) \n 换行
水平制表 (HorizontalTab) \t 制表位 (Tab)
反斜杠 (backslash) \\ 打印反斜杠
cout << "我是\n一鸣\t老师\n";
// 输出:
// 我是
// 一鸣  老师

五、 数据类型隐式转换

  • 定义: 编译器自动执行的类型转换过程,通常是从较小范围低精度类型向较大范围高精度类型的转换,以避免数据丢失。
运算 转换后 (Result Type)
(int) + (float) (float)
(int) + (double) (double)
(double) + (float)

0 条评论

目前还没有评论...