Appearance
C++ 数字
C++ 提供了多种数字类型,包括整型和浮点型。在本章节中,我们将介绍 C++ 的数字类型及其操作。
1. 数字类型
1.1 整型
整型用于存储整数,包括以下几种类型:
| 类型 | 说明 | 大小(字节) | 取值范围 |
|---|---|---|---|
char | 字符型(本质上是小整型) | 1 | -128 到 127 |
signed char | 有符号字符型 | 1 | -128 到 127 |
unsigned char | 无符号字符型 | 1 | 0 到 255 |
short | 短整型 | 2 | -32768 到 32767 |
unsigned short | 无符号短整型 | 2 | 0 到 65535 |
int | 整型 | 4 | -2147483648 到 2147483647 |
unsigned int | 无符号整型 | 4 | 0 到 4294967295 |
long | 长整型 | 4 或 8 | 取决于系统 |
unsigned long | 无符号长整型 | 4 或 8 | 取决于系统 |
long long | 长长整型 | 8 | -9223372036854775808 到 9223372036854775807 |
unsigned long long | 无符号长长整型 | 8 | 0 到 18446744073709551615 |
示例
cpp
#include <iostream>
int main() {
char c = 'A';
short s = 1000;
int i = 100000;
long l = 1000000L;
long long ll = 10000000000LL;
unsigned int ui = 4000000000U;
std::cout << "char: " << c << std::endl;
std::cout << "short: " << s << std::endl;
std::cout << "int: " << i << std::endl;
std::cout << "long: " << l << std::endl;
std::cout << "long long: " << ll << std::endl;
std::cout << "unsigned int: " << ui << std::endl;
return 0;
}1.2 浮点型
浮点型用于存储带有小数点的数值,包括以下几种类型:
| 类型 | 说明 | 大小(字节) | 精度 |
|---|---|---|---|
float | 单精度浮点型 | 4 | 约7位小数 |
double | 双精度浮点型 | 8 | 约15位小数 |
long double | 长双精度浮点型 | 8 或 16 | 取决于系统 |
示例
cpp
#include <iostream>
int main() {
float f = 3.14f;
double d = 3.141592653589793;
long double ld = 3.14159265358979323846L;
std::cout << "float: " << f << std::endl;
std::cout << "double: " << d << std::endl;
std::cout << "long double: " << ld << std::endl;
return 0;
}2. 数学运算
2.1 基本算术运算
cpp
#include <iostream>
int main() {
int a = 10;
int b = 3;
std::cout << "a + b = " << a + b << std::endl; // 13
std::cout << "a - b = " << a - b << std::endl; // 7
std::cout << "a * b = " << a * b << std::endl; // 30
std::cout << "a / b = " << a / b << std::endl; // 3(整数除法)
std::cout << "a % b = " << a % b << std::endl; // 1(取模)
return 0;
}2.2 浮点数运算
cpp
#include <iostream>
int main() {
double a = 10.5;
double b = 3.2;
std::cout << "a + b = " << a + b << std::endl; // 13.7
std::cout << "a - b = " << a - b << std::endl; // 7.3
std::cout << "a * b = " << a * b << std::endl; // 33.6
std::cout << "a / b = " << a / b << std::endl; // 3.28125
return 0;
}3. 数学函数
C++ 提供了丰富的数学函数,定义在<cmath>头文件中。
3.1 常用数学函数
| 函数 | 描述 | 示例 |
|---|---|---|
abs(x) | 绝对值 | abs(-5) 返回 5 |
sqrt(x) | 平方根 | sqrt(16) 返回 4 |
pow(x, y) | x 的 y 次方 | pow(2, 3) 返回 8 |
exp(x) | e 的 x 次方 | exp(1) 返回 2.71828 |
log(x) | 自然对数 | log(2.71828) 返回 1 |
log10(x) | 以 10 为底的对数 | log10(100) 返回 2 |
sin(x) | 正弦函数 | sin(0) 返回 0 |
cos(x) | 余弦函数 | cos(0) 返回 1 |
tan(x) | 正切函数 | tan(0) 返回 0 |
ceil(x) | 向上取整 | ceil(3.14) 返回 4 |
floor(x) | 向下取整 | floor(3.14) 返回 3 |
round(x) | 四舍五入 | round(3.14) 返回 3 |
示例
cpp
#include <iostream>
#include <cmath>
int main() {
std::cout << "abs(-5) = " << std::abs(-5) << std::endl;
std::cout << "sqrt(16) = " << std::sqrt(16) << std::endl;
std::cout << "pow(2, 3) = " << std::pow(2, 3) << std::endl;
std::cout << "exp(1) = " << std::exp(1) << std::endl;
std::cout << "log(2.71828) = " << std::log(2.71828) << std::endl;
std::cout << "log10(100) = " << std::log10(100) << std::endl;
std::cout << "sin(0) = " << std::sin(0) << std::endl;
std::cout << "cos(0) = " << std::cos(0) << std::endl;
std::cout << "tan(0) = " << std::tan(0) << std::endl;
std::cout << "ceil(3.14) = " << std::ceil(3.14) << std::endl;
std::cout << "floor(3.14) = " << std::floor(3.14) << std::endl;
std::cout << "round(3.14) = " << std::round(3.14) << std::endl;
return 0;
}4. 随机数
C++ 提供了生成随机数的函数,定义在<cstdlib>和<random>头文件中。
4.1 旧方法(C 风格)
cpp
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
// 设置随机数种子
std::srand(std::time(0));
// 生成 1 到 100 之间的随机数
int random_number = std::rand() % 100 + 1;
std::cout << "随机数: " << random_number << std::endl;
return 0;
}4.2 新方法(C++11)
cpp
#include <iostream>
#include <random>
int main() {
// 创建随机数引擎
std::random_device rd;
std::mt19937 gen(rd());
// 创建分布
std::uniform_int_distribution<> dis(1, 100);
// 生成随机数
int random_number = dis(gen);
std::cout << "随机数: " << random_number << std::endl;
return 0;
}5. 数字格式化输出
5.1 设置精度
cpp
#include <iostream>
#include <iomanip>
int main() {
double pi = 3.141592653589793;
std::cout << "默认精度: " << pi << std::endl;
std::cout << "精度为 5: " << std::setprecision(5) << pi << std::endl;
std::cout << "精度为 10: " << std::setprecision(10) << pi << std::endl;
std::cout << "固定小数点,精度为 5: " << std::fixed << std::setprecision(5) << pi << std::endl;
return 0;
}5.2 设置宽度
cpp
#include <iostream>
#include <iomanip>
int main() {
int a = 10;
int b = 20;
int c = 30;
std::cout << "默认宽度:" << std::endl;
std::cout << a << " " << b << " " << c << std::endl;
std::cout << "宽度为 10:" << std::endl;
std::cout << std::setw(10) << a << std::setw(10) << b << std::setw(10) << c << std::endl;
return 0;
}6. 数字类型转换
6.1 隐式转换
cpp
#include <iostream>
int main() {
int i = 10;
double d = i; // int 隐式转换为 double
std::cout << "i = " << i << std::endl;
std::cout << "d = " << d << std::endl;
return 0;
}6.2 显式转换
cpp
#include <iostream>
int main() {
double d = 3.14;
int i = static_cast<int>(d); // double 显式转换为 int
std::cout << "d = " << d << std::endl;
std::cout << "i = " << i << std::endl;
return 0;
}7. 数字的限制
可以使用<climits>和<cfloat>头文件中的宏来获取数字类型的限制。
7.1 整型限制
cpp
#include <iostream>
#include <climits>
int main() {
std::cout << "char 的范围: " << CHAR_MIN << " 到 " << CHAR_MAX << std::endl;
std::cout << "unsigned char 的范围: 0 到 " << UCHAR_MAX << std::endl;
std::cout << "short 的范围: " << SHRT_MIN << " 到 " << SHRT_MAX << std::endl;
std::cout << "unsigned short 的范围: 0 到 " << USHRT_MAX << std::endl;
std::cout << "int 的范围: " << INT_MIN << " 到 " << INT_MAX << std::endl;
std::cout << "unsigned int 的范围: 0 到 " << UINT_MAX << std::endl;
std::cout << "long 的范围: " << LONG_MIN << " 到 " << LONG_MAX << std::endl;
std::cout << "unsigned long 的范围: 0 到 " << ULONG_MAX << std::endl;
std::cout << "long long 的范围: " << LLONG_MIN << " 到 " << LLONG_MAX << std::endl;
std::cout << "unsigned long long 的范围: 0 到 " << ULLONG_MAX << std::endl;
return 0;
}7.2 浮点型限制
cpp
#include <iostream>
#include <cfloat>
int main() {
std::cout << "float 的最小值: " << FLT_MIN << std::endl;
std::cout << "float 的最大值: " << FLT_MAX << std::endl;
std::cout << "double 的最小值: " << DBL_MIN << std::endl;
std::cout << "double 的最大值: " << DBL_MAX << std::endl;
std::cout << "long double 的最小值: " << LDBL_MIN << std::endl;
std::cout << "long double 的最大值: " << LDBL_MAX << std::endl;
return 0;
}8. 示例:综合运用
现在,让我们看一个综合运用各种数字操作的例子:
cpp
#include <iostream>
#include <cmath>
#include <random>
#include <iomanip>
#include <climits>
int main() {
// 整型
std::cout << "整型:" << std::endl;
int i = 100000;
long long ll = 10000000000LL;
std::cout << "int: " << i << std::endl;
std::cout << "long long: " << ll << std::endl;
std::cout << std::endl;
// 浮点型
std::cout << "浮点型:" << std::endl;
float f = 3.14f;
double d = 3.141592653589793;
std::cout << "float: " << f << std::endl;
std::cout << "double: " << d << std::endl;
std::cout << std::endl;
// 数学运算
std::cout << "数学运算:" << std::endl;
int a = 10;
int b = 3;
std::cout << "a + b = " << a + b << std::endl;
std::cout << "a - b = " << a - b << std::endl;
std::cout << "a * b = " << a * b << std::endl;
std::cout << "a / b = " << a / b << std::endl;
std::cout << "a % b = " << a % b << std::endl;
std::cout << std::endl;
// 数学函数
std::cout << "数学函数:" << std::endl;
std::cout << "sqrt(16) = " << std::sqrt(16) << std::endl;
std::cout << "pow(2, 3) = " << std::pow(2, 3) << std::endl;
std::cout << "abs(-5) = " << std::abs(-5) << std::endl;
std::cout << std::endl;
// 随机数
std::cout << "随机数:" << std::endl;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 100);
int random_number = dis(gen);
std::cout << "随机数: " << random_number << std::endl;
std::cout << std::endl;
// 数字格式化输出
std::cout << "数字格式化输出:" << std::endl;
double pi = 3.141592653589793;
std::cout << "默认精度: " << pi << std::endl;
std::cout << "固定小数点,精度为 5: " << std::fixed << std::setprecision(5) << pi << std::endl;
std::cout << std::endl;
// 数字类型转换
std::cout << "数字类型转换:" << std::endl;
double d2 = 3.14;
int i2 = static_cast<int>(d2);
std::cout << "double: " << d2 << std::endl;
std::cout << "int: " << i2 << std::endl;
std::cout << std::endl;
// 数字的限制
std::cout << "数字的限制:" << std::endl;
std::cout << "int 的范围: " << INT_MIN << " 到 " << INT_MAX << std::endl;
std::cout << "double 的最小值: " << DBL_MIN << std::endl;
std::cout << "double 的最大值: " << DBL_MAX << std::endl;
return 0;
}小结
C++ 数字包括:
数字类型:
- 整型:
char、short、int、long、long long - 浮点型:
float、double、long double
- 整型:
数学运算:
- 基本算术运算:
+、-、*、/、% - 浮点数运算
- 基本算术运算:
数学函数:
abs(x):绝对值sqrt(x):平方根pow(x, y):x 的 y 次方sin(x)、cos(x)、tan(x):三角函数ceil(x)、floor(x)、round(x):取整函数
随机数:
- 旧方法(C 风格):使用
std::rand()和std::srand() - 新方法(C++11):使用
<random>库
- 旧方法(C 风格):使用
数字格式化输出:
- 设置精度:
std::setprecision() - 设置宽度:
std::setw()
- 设置精度:
数字类型转换:
- 隐式转换
- 显式转换:
static_cast<>()
数字的限制:
- 使用
<climits>和<cfloat>头文件中的宏
- 使用
掌握数字类型和操作是编写 C++ 程序的基础,在后续章节中,我们将学习 C++ 的数组。