---
slug: int
lesson: 8
chapter: 2
chapterTitle: 变量
title: C++ 的 int 整型：7 除以 2 为什么等于 3？
description: int 是装整数的类型，取值范围约 ±21 亿。整数除法直接舍去小数部分，7 / 2 得 3 而不是 3.5。本课用可在线运行的对照示例讲清整数除法，以及什么情况下需要用 double。
code: |
  #include <iostream>
  using namespace std;

  int main() {
      cout << 7 / 2 << endl;
      cout << 7.0 / 2 << endl;
      int a = 10;
      int b = 3;
      cout << a / b << endl;
      cout << a % b << endl;
      return 0;
  }
faq:
  - q: C++ 中 7/2 的结果是什么？
    a: 3。两个 int 相除执行整数除法，直接舍去小数部分（不是四舍五入）。要得到 3.5，至少一边写成小数：7.0 / 2。
  - q: int 最大能装多大的数？
    a: 常见环境下约 ±21 亿（-2147483648 到 2147483647）。超过范围会溢出，得到错误结果。更大的整数用 long long，见第 12 课。
  - q: "'%' 是什么运算？"
    a: 取余。10 % 3 得 1，即 10 除以 3 的余数。判断奇偶、整除、按位循环都靠它，是入门阶段使用频率很高的运算符。
---

<div class="answer">
int 是装整数的类型，范围约 ±21 亿。两个 int 相除是整数除法：7 / 2 得 3，
小数部分直接舍去。配套运算符 % 取余数：10 % 3 得 1。要小数结果，改用 double。
</div>

## 整数的存储

`int` 是最常用的整数类型，日常计数、分数、年龄都用它。它能装的数有上限：常见环境下约 **±21 亿**。超出范围会溢出——结果不是报错，而是一个错误的值。溢出的实况演示见第 12 课，本课先建立"int 有边界"的直觉。

## 整数除法：本课重点

```cpp
cout << 7 / 2 << endl;     // 输出 3，不是 3.5
cout << 7.0 / 2 << endl;   // 输出 3.5
```

规则：**两个整数相除，结果还是整数**，小数部分直接舍去（注意是舍去，不是四舍五入，所以 7 / 2 得 3 而不是 4）。只要参与运算的至少一边是小数，结果就是小数。

取余运算 `%` 与整数除法配套：`a / b` 是商，`a % b` 是余数：

```cpp
int a = 10, b = 3;
cout << a / b << endl;   // 3
cout << a % b << endl;   // 1
```

判断一个数是奇是偶（`n % 2`）、能否整除，都是 `%` 的典型用途。

## 可视化观察

在 CppStudio 中打开本课示例，点击播放：

1. 第一条 cout 输出 `3`——可以暂停确认：不是 3.5；
2. 第二条 cout 输出 `3.5`——与第一条逐字对照，差别只在 `7.0`；
3. 变量 a、b 定义后出现在监视区，执行除法和取余时对照监视区心算一遍，再与输出核对。

## 常见错误

- **期待小数却用整数除法**：算平均分写成 `sum / count` 得整数，应写 `sum * 1.0 / count` 或使用 double；
- **除数为 0**：`a / 0` 程序直接崩溃或得到未定义结果，除法前确认除数非 0；
- **溢出无提示**：两个大数相乘超出 int 范围不会报错，只会得到错误答案，数值大时换 long long。

下一课：浮点数 double——小数怎么存，以及 0.1 + 0.2 为什么不是 0.3。
