全世界AI突然失灵 我用古法编程年入百万第二天
常量、二进制、数据类型从入门
前言
在上一篇文章中,我们一起学习了C语言基础的输入输出、变量定义与使用,以及新手最容易踩的各类语法坑。随着学习的深入,我们来到了C语言最核心、也最容易被忽略的基础部分:常量、二进制与数据类型。
很多初学者觉得这部分内容枯燥、简单,不愿意认真学,可真正写代码时才发现:90%的诡异Bug,都来自数据类型、溢出、符号位、精度、常量定义这些基础细节。
这篇文章我将用最直白、最系统的方式,带你一次性吃透这些知识点,同时把新手最容易踩的坑全部扒干净。无论是准备学嵌入式,还是正在打C语言基础,这篇都非常适合你。
第4章 常量
4.1 什么是常量
在程序运行过程中,值不可以被改变的量称为常量。
例如:圆周率 PI、最大允许年龄、固定配置参数、设备地址等,一旦定义就不希望被修改。
4.2 常量的分类
C语言中常量主要分为两类:
- 字面常量:直接写在代码中的固定值,如
100、3.14、'A'。 - 标识符常量:用名称表示的常量,方便阅读与统一修改。
4.3 #define 定义常量#define 是预处理指令,在编译前进行纯文本替换。
语法
#define 常量名 常量值
示例
#include <stdio.h>
#define PI 3.14
int main() {
double r = 2.0;
double area = PI * r * r;
printf("面积 = %.2f\n", area);
return 0;
}
注意事项
- 不能加分号,加分号会被当作常量内容一起替换,导致语法错误。
- 作用域从定义开始到文件结束。
- 不进行类型检查,仅做文本替换。
4.4 const 定义常量const 是类型安全的常量定义方式,属于C语言标准语法。
语法
const 数据类型 常量名 = 值;
示例
#include <stdio.h>
const double PI = 3.14;
int main() {
double r = 2.0;
double area = PI * r * r;
printf("面积 = %.2f\n", area);
return 0;
}
特点
- 有数据类型,编译器会做类型检查。
- 有地址、占用内存,更安全。
- 不能被修改,修改会直接报错。
4.5 #define 与 const 的区别
#define:预处理阶段文本替换,无类型、不安全、不占内存。const:编译阶段处理,有类型、安全、占用内存。- 嵌入式开发建议优先使用
const。
第5章 二进制与进制转换
5.1 为什么要学二进制
计算机底层只识别 0 和 1,所有数据最终都以二进制存储。
掌握二进制是理解数据存储、溢出、位运算、内存、嵌入式寄存器的第一步。
5.2 常用进制表示
- 二进制:0、1,以
0b开头 - 十进制:0~9,日常使用
- 十六进制:0~9、A~F,以
0x开头,程序员最常用
5.3 C语言中进制写法
int a = 10; // 十进制
int b = 0b1010; // 二进制
int c = 0xA; // 十六进制
5.4 进制转换规则
二进制 → 十进制
按权展开求和。
例:1011 = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 11
十进制 → 二进制
除2取余,逆序排列。
二进制 ↔ 十六进制
- 4位二进制 = 1位十六进制
- 从低位开始分组,一组4位
5.5 原码、反码、补码
计算机存储负数必须用补码。
规则
- 正数:原码=反码=补码
- 负数:
- 原码:最高位符号位为1
- 反码:符号位不变,其余取反
- 补码:反码 + 1
作用
统一正负号运算规则,让计算机只用加法就能完成减法运算。
第6章 数据类型
6.1 数据类型的作用
不同数据类型占用不同大小的内存,能存储的数据范围不同。
合理选择类型可以节省内存、避免溢出、提高效率。
6.2 整数类型
常用整型
- char:1字节
- short:2字节
- int:4字节
- long:4/8字节
- long long:8字节
有符号与无符号
signed:可正可负(默认)unsigned:只能存正数与0,范围扩大一倍
例:
char:-128 ~ 127unsigned char:0 ~ 255
嵌入式常用精确类型
#include <stdint.h>
int8_t // 8位有符号
uint8_t // 8位无符号
int32_t // 32位有符号
uint32_t // 32位无符号
6.3 浮点类型
用于存储小数。
类型
- float:4字节
- double:8字节(默认)
- long double:16字节
注意
- 浮点字面量默认是
double - float 必须加后缀
f,如3.14f
6.4 字符类型 char
char 本质是 1字节整数,存储 ASCII 码。
char ch = 'A';
printf("%c\n", ch); // 输出字符
printf("%d\n", ch); // 输出 ASCII 码 65
6.5 数据大小获取 sizeof
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(double));
新手高频踩坑总结(必读)
- #define 后面加分号 → 编译报错
- 修改 const 常量 → 直接报错
- 整数溢出 → 数值异常、变负数
- unsigned 与 signed 混用 → 比较结果异常
- 浮点数用 == 判断相等 → 精度问题导致错误
- scanf 输入 double 用 %f → 必须用 %lf
- char 当做整数运算 → 结果超出预期
- 二进制/十六进制前缀写错 → 编译失败
总结
C语言的强大,不在于语法多复杂,而在于对数据和内存的精确掌控。
常量、二进制、数据类型看似基础,却是嵌入式开发、底层开发的重中之重。
把这一章学扎实,你未来写代码会少踩90%的坑。
我是一名从零开始冲击嵌入式的小白,持续分享最真实、最干货的从零入门笔记。
下篇我们继续学习:运算符、表达式与流程控制。
欢迎关注,一起成长!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)