—— 像收纳盒一样管理数据

一、为什么需要数据类型?

就像衣柜里需要不同抽屉放衣服、袜子、围巾,计算机也需要不同 "容器" 存储不同数据:

年龄(18、25)→ 整数容器身高(1.75m)→ 小数容器名字("张三")→ 字符串容器

举个例子:智能手表里的数据分工

时间(0~59)→ 小容量容器(unsigned char)步数(136888)→ 中容量容器(unsigned int)温度(25.6℃)→ 小数容器(float)

二、整型(int):装整数的盒子

2.1 基本概念

int a = 250; 就像:

买了个叫 "a" 的盒子盒子大小固定(4 字节,约能装 10 亿以内的数)把 250 转换成二进制(00000000 00000000 00000000 11111010)放进盒子

2.2 取值范围

像温度计的量程:最低 - 2147483648℃,最高 2147483647℃查范围的小技巧:在 Linux 终端输入 getconf INT_MAX 直接看最大值

三、整型的 "变形盒":修饰符

就像给盒子换大小:

short(短整型):盒子缩小一半(2 字节),只能装 - 32768~32767

例:short a = 10000;(装小数字更省空间)

long(长整型):盒子放大(64 位系统 8 字节),能装更大的数

例:long b = 1234567890123;

unsigned(无符号):去掉盒子的 "正负标记",只能装正数,容量翻倍

例:unsigned c = 4294967295;(原本能装到 21 亿,现在能装到 42 亿)

四、怎么知道盒子有多大?用 sizeof

sizeof(int) 就像用尺子量盒子:

sizeof(int) → 4 字节(标准盒子)sizeof(short) → 2 字节(小盒子)sizeof(long) → 8 字节(大盒子)

小窍门:量变量可以省掉括号,量类型必须带括号

c

运行

int a;

sizeof(a); // 正确(量变量)

sizeof int; // 错误!量类型必须加括号:sizeof(int)

五、盒子里的 "正负标记":符号位

整数盒子的最高位是 "正负标签":

0 → 正数(如 00001010 表示 10)1 → 负数(如 10001010 表示 - 10)

举个例子:

同样是 8 字节的数 0x80000000

有符号盒子(int)→ 读成 - 2147483648无符号盒子(unsigned)→ 读成 2147483648

六、整数怎么放进盒子?补码的秘密

计算机存负数时会 "加密",就像寄快递前要包装:

正数:直接放进去(原码 = 补码)

100 → 二进制 00000000 00000000 00000000 01100100

负数:先包装再放(原码→反码→补码)

-100 → 绝对值 100 的原码→取反→加 1 → 最终存补码

解密规则:负数的补码要还原,就再做一次 "取反 + 1"(相当于拆包装)

七、盒子装太满会怎样?溢出

就像水杯装太满会溢出来,整数超过盒子容量会 "转圈":

short 类型最大能装 32767,再加 1 就变成 - 32768(像里程表走到头又从零开始)int 类型最大 2147483647,加 1 就变成 - 2147483648

演示:

c

运行

short a = 32767;

a = a + 1; // a变成-32768(溢出了!)

八、怎么往盒子里装数据?scanf

scanf 就像快递员送货,必须按地址格式送:

要送整数到 int 盒子:scanf("%d", &a);格式不对会送错:scanf("%d,%d", &a, &b) 必须输入 "10,20"(用逗号分隔)

注意:如果输入错了(比如该输数字却输字母),快递会卡在半路(留在输入缓冲区),需要用fflush(stdin)清掉。

总结:数据类型就像收纳术

选对盒子(类型)→ 省空间又安全别装太满(溢出)→ 否则数据会 "乱码"按规则存取(原码 / 补码、scanf 格式)→ 数据才不会 "变质"