—— 像收纳盒一样管理数据
一、为什么需要数据类型?
就像衣柜里需要不同抽屉放衣服、袜子、围巾,计算机也需要不同 "容器" 存储不同数据:
年龄(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 格式)→ 数据才不会 "变质"