学习
错题
模考
我的
登录/注册/忘记密码
学习 / 顺序结构 / 数据类型
数据类型
int、char、float;long / double / unsigned;取值范围
1. 三种基础类型
数据类型规定:这块内存占多少字节、按什么规则解释。先记住三个最常用的基础类型。 | 类型 | 存什么 | 典型用途 | | --- | --- | --- | | `int` | 整数 | 计数、循环变量、下标 | | `char` | 单个字符(本质仍是整数编码) | 字母、符号,或很小的整数 | | `float` | 单精度小数 | 带小数的量,精度要求不高时 | ```c int n = 65; char c = 'A'; /* 编码也是 65,但按字符理解 */ float x = 3.14f; ``` 注意: - `char` 既能当字符,也能当很小的整数,二者是同一份编码。 - `float` 有精度误差,不要用「相等」去判断两个计算结果是不是同一个数。 - 局部变量如果没赋值,值是不确定的,不能当 0 用。
2. 修饰与扩展
三个基础类型不够用时,用下面这些扩展或修饰。它们不是「另一种语法」,而是在解决具体问题。 **`long` / `long long`:把整数范围做大** - `int` 装不下更大的整数时用,例如更大的计数、更大的编号。 - `long` 保证不短于 `int`;`long long` 至少 64 位,能装更大的整数。 - 需要「比 int 更大」时优先想 `long long`,不要假设 `long` 在所有环境都是 8 字节。 **`double`:把小数算得更准** - `float` 有效数字大约只有 6~7 位,累加、连除时误差更明显。 - `double` 是双精度,有效数字大约 15~16 位,一般小数运算优先用它。 - `float` 省空间;要稳、要准,用 `double`。 **`unsigned`:只要非负,换更大的正数范围** - 去掉负数,把符号位也用来表示数值,正数一侧大约翻倍。 - 适合长度、次数、下标这类「不应该是负数」的量。 - 不能表示负数:把 `-1` 赋给 `unsigned`,会变成一个很大的正数。 `short` 可以记一句:比 `int` 更省空间的整数,专升本里不如 `int` 常用。
3. 常见取值范围
下面按**常见 32 / 64 位教学环境**来记。C 标准并不写死 `int` 一定是 4 字节,拿不准时用 `sizeof` 看当前环境。 | 类型 | 典型字节 | 大约取值范围 | 解决什么问题 | | --- | --- | --- | --- | | `char` | 1 | −128~127(有符号)或 0~255 | 单个字符;很小的整数 | | `unsigned char` | 1 | 0~255 | 字节、明确非负的小整数 | | `int` | 4 | 约 −2.1×10⁹ ~ 2.1×10⁹ | 最常用的整数 | | `unsigned int` | 4 | 0 ~ 约 4.3×10⁹ | 只要非负,正数一侧更大 | | `long` | 4 或 8 | 不短于 `int` | `int` 可能不够大时再考虑 | | `long long` | 8 | 约 −9.2×10¹⁸ ~ 9.2×10¹⁸ | 很大的整数 | | `unsigned long long` | 8 | 0 ~ 约 1.8×10¹⁹ | 很大的非负整数 | | `float` | 4 | 约 ±3.4×10³⁸,有效数字约 6~7 位 | 单精度小数,省空间 | | `double` | 8 | 约 ±1.8×10³⁰⁸,有效数字约 15~16 位 | 常用小数,更稳 | 怎么选,先问三件事:是整数还是小数、会不会是负数、`int` / `float` 的范围和精度够不够。
开始练习
返回顺序结构
登录
注册
忘记密码
点击此处输入用户名
点击此处输入密码
登录
点击此处输入用户名
点击此处输入密码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入新密码