导读: C 语言程序中经常涉及一些数学计算, 所以要熟悉其基本的数据类型. 数据类型学习起来比较枯燥, 不过结合之前的内存概念, 以及本节的字节概念, 相信数据类型也就不难理解了. 本章从二进制的基本概念开始, 然后介绍机器语言通用的计算单位字节, 最后再介绍 C 语言中基本的数据类型及其基本概念.
4.1 二进制, 字节
计算机, 电子信息专业类的大学课程, 肯定会有讲解二进制与十进制转换的课程, 本节为了篇幅小一点, 只提供 Windows 计算器中进制转换工具的使用方法, 希望读者谅解.
4.1.1 二进制
机器之间沟通用的是机器语言, 机器语言用二进制数据相互沟通, 什么是二进制数据? 为什么是二进制数据呢? 我们日常生活中比较熟悉的是十进制数据, 当数字从 1 开始不停的加 1, 加到 10 的时候再加 1 就会变成 11, 那么个位又变回 1 了, 这就叫做满 10 进 1.
还有比较熟悉的是十二进制, 就是我们的时钟了, 当时针从 1 开始不停加到 12 时, 再加 1, 时针就又变成 1 了. 当然如果有人习惯 24 小时制, 那就理解为二十四进制也可.
图 4.1 时钟
同理, 分针和秒针就是 60 进制了, 满 60 进 1.
那么, 二进制就应该是满 2 进 1 咯, 对的, 举个简单例子: 十进制的 1,2,3 在二进制为 01,10,11. 可以看到十进制的 3 在二进制的第一位为 1, 因为它满 2 就进 1 了.
平时用进制转换可以搬用公式计算, 当然快捷的办法是用 Windows 自带的计算器, 打开 win10 系统的计算器软件, 选择程序员选项.
注意: 不同版本的 Windows 的计算器用法稍微不同, 请读者自行了解.
图 4.2 Windows 计算器
鼠标点击 DEC, 选择十进制, 在 DEC 中输入 123, 可以发现二进制 BIN 为 01111011, 八进制 OCT 为 173, 十六进制为 7B, 如图 4.3 所示,
图 4.3 计算器进制转换
计算器基本用法就是这样了.
注意: 为什么机器语言是二进制语言? 涉及到数字电路方面的知识, 说白了 CPU, 内存这些就是大量的开关组合起来的, 开就是 1, 关就是 0, 这正是二进制的一种体现.
4.1.2 字节
二进制最小单位是位 (bit), 英文有个词组叫做 a little bit, 意思就是一点点, bit 就是最小的位元, 比如十进制 1 的二进制有一个位, 十进制 2 的二进制有两个位 "10", 十进制 3 的二进制也能用两位表示 "11", 十进制 4 的二进制用三个位表示 "100". 但是 C 语言内存中最小数据是 1 个字节 (byte),1 个字节有八个位, 也就是十进制 1 的二进制表示为 "00000001", 十六进制表示为 "0x01". 来个复杂的, 十进制的 141 表示为...... 打开计算器, 可知二进制为 "10001101", 它的十六进制为 "0x8D".
注意: 十六进制一般会在数值前添加 "0x", 用于区分十进制类似的数, 比如十进制 69 和十六进制 69 就不相等, 十六进制的 69 等于十进制的 105, 所以用 "0x69" 表示十六进制.
因为 1 个字节有八位, 所以 1 个字节数值范围在 0~255 之间, 因为当二进制八位数都为 1 时即 "11111111" 最大, 等于 255.
所以 2 个字节有十六位, 数值范围在 0~65535 之间, 因为当二进制十六位数都为 1 时即 "1111111111111111" 最大, 等于 65535.
所以 4 个字节有三十二位, 数值范围在 0~4294967295之间......
所以 8 个字节有六十四位, 数值范围在......
4.2 基本数据类型
C 语言中基本数据类型有字符型 char, 布尔型 bool, 整型 int, 长整型 long, 浮点型 float 等等, 对应的还有无符号字符型 unsigned char, 无符号整型 unsigned int 等等.
数据类型有很多, 目前就介绍 6 种, 但是如何运用它们呢? 我觉得只需要知道这个数据类型的取值范围以及占用多少字节即可. 下表请死记硬背:
数据类型 | 取值范围 | 占用字节数 |
char | -128 到 127 | 1 |
int | -2,147,483,648 到 2,147,483,647 | 4 |
float | 1.2E-38 到 3.4E+38 | 4 |
unsigned char | 0 到 255 | 1 |
unsigned int | 0 到 4,294,967,295 | 4 |
bool | true 或者 false | 2 |
表 4.1 列举一些基本数据类型
注意: 当然 C 语言数据类型不止这些, 因为这系列博客只是编程入门篇, 不是搬移各个博客的汇总篇, 所以数据类型只介绍其中一部分, 日后需要了解别的部分应该就能更轻松的了解.
发现问题: 表中 char 型和 unsigned char 型的占用字节数都是 1 个, 但是取值范围不同.
解释: unsigned 的英文直译是无符号的, 而负数的符号是一个负号 "-", 所以无符号就是无负号, 就是大于 0 的数. 而有符号, 就是能够有负号, 可以取值小于 0, 这样就不难理解他们的取值范围了.
注意: 数据类型不加 unsigned 默认为有符号类型.
比如 char, 是可以有负号的 char, 取值范围可以小于 0, 由于占的字节数是 1 个, 所以范围是 - 128~127, 数据的变化总量就是 |-128|+127=255, 正好是一个字节的取值量.
unsigned char, 是无符号的 char, 取值范围必须大于 0, 范围是 0~255,. 同理, int 和 unsigned int 也是这样对比.
float 类型是浮点类型, 说白了就是带小数点的, 比如 float 类型的值可以取 3.1415, 而 int 类型只能取值为 3, 后面章节讲到运算方面会再次对比 float 和 int.
编程的时候会需要做程序判决功能, 就会用到 bool 类型的数据, 取值有真 true 和假 false 两种.
来源: https://www.cnblogs.com/songsongman/p/11270122.html