当前位置: 首页 > news >正文

C语言学习(第一天)

🔧 C语言基础与STM32矿探小车开发入门(第一篇)

🌟 前言

第一天接触STM32矿探小车项目,今日重点学习C语言基础语法,深入理解表达式与运算符的底层逻辑,为后续开发奠定基础。
环境安装:Dev-C++

📚 一、C语言基础语法详解

1.1 第一个C程序:Hello World

#include <stdio.h>  
int main() {printf("hello world \n"); // '\n' 等价于换行符,与C++的std::endl功能相似return 0; // 标准返回值,建议显式添加
}

1.2 代码书写规范

  • 格式要求
    • 代码顶格书写,括号成对出现,{}独立占行
    • 括号内内容缩进一个Tab,多层嵌套时层级清晰
    {  {  {  // 深层逻辑代码  }  }  
    }
    

1.3 变量定义与标识符规则

  • 变量本质:存储数据的容器,值可变化
  • 定义格式
    数据类型 变量名;        // 如 int a;
    数据类型 变量名 = 初始值; // 如 float b = 3.14;
    
  • 标识符规则
    1. _、字母、数字组成,禁止其他符号
    2. 数字不能开头(如250sb非法,sb250合法)
    3. 不能使用关键字(如ifforswitch等)
      建议:见名知意,如temperaturet更易读

1.4 数据类型与内存占用

类型字节数范围(有符号)范围(无符号)
int2/4字节-2^31 ~ 2^31-10 ~ 2^32-1
char1字节-128 ~ 1270 ~ 255
float4字节约±1.2e-38 ~ ±3.4e+38——
double8字节约±2.3e-308 ~ ±1.7e+308——
  • sizeof 运算符 :计算类型或变量占用字节数
printf("int占用 %ld 字节\n", sizeof(int)); // 输出:int占用 4 字节(32位系统)

1.5 常量类型与应用

  • 整数常量
    • 八进制:以0开头,如0172(对应二进制001 111 010
    • 十六进制:以0x开头,如0xff(对应二进制1111 1111
  • 字符常量:单引号包裹,如'a'(ASCII值97)、'\n'(换行符)、'\0'(字符串结束符)
  • 字符串常量:双引号包裹,自动末尾添加'\0',如"abc"占用4字节('a','b','c','\0'

⚙️ 二、表达式与运算符深度解析

2.1 表达式基础

  • 定义:由运算符连接的合法式子,必有一个值
    int a = 1 + 2 * 3; // 表达式1+2*3的值为7,a=7
    

2.2 核心运算符详解

2.2.1 算术运算符
  • 整数运算特性:结果必为整数,如3/2=13%2=1
  • 自增/自减运算符
    int i = 0;
    printf("%d %d", ++i, i++); // 输出:1 1(前置自增表达式值为1,后置自增表达式值为0)
    
2.2.2 关系运算符
  • 结果类型:布尔值(0为假,1为真)
  • 易错点:关系运算符从左到右结合
    printf("%d", 5 > 4 > 3); // 输出0(先算5>4=1,再算1>3=0)
    
2.2.3 逻辑运算符(惰性运算)
运算符规则惰性示例
&&全真为真,一假则假0 && any(直接返回0,不计算any)
``
!取反(0变1,非0变0)!5(返回0)
int a=0, b=1;
printf("%d %d", a++&&b++, a||!b); // 输出0 1(a++&&b++中a=0,不计算b++;a||!b中a=1,返回1)
2.2.4 位运算符(底层操作核心)
运算符功能示例(假设a=0b00000111,即7)
<<左移(乘2^n)a<<1=0b00001110=14
>>右移(有符号补符号位,无符号补0)a>>1=0b00000011=3
~按位取反~a=0b11111000=248
&按位与(置0操作)a&~(1<<2)=0b00000011=3(清第2位)
``按位或(置1操作)
^异或(取反/交换操作)a^=1<<3(第3位取反)

经典应用:不借助临时变量交换值

int a=3, b=4;
a ^= b; b ^= a; a ^= b; // a=4, b=3

2.3 复合运算符与优先级

  • 赋值复合运算a += b等价于a = a + b,同理支持-=, *=, /=, %=
  • 优先级口诀(从高到低):
    () [] -> . > ! ~ ++ -- > * / % > + - > << >> > > < >= <= > == != > && > || > ?: > =

🛠️ 实战练习与代码优化

练习1:位操作实战

#include <stdio.h>
int main() {unsigned char a = 7; // 0b00000111// 置位操作:将第5、6位(从0开始)置1a |= (3 << 5);  // 3<<5=0b1100000,按位或后第5、6位为1// 取反操作:高4位取反,低4位不变a ^= (0xF0 << 4); // 0xF0<<4=0xF000(高8位取反,此处仅影响高4位)printf("操作后a的值:%d(二进制:0b%08b)\n", a, a);return 0;
}

练习2:颜色值合成(32位ARGB)

#include <stdio.h>
int main() {unsigned char alpha = 255;  // 透明度unsigned char red = 255;    // 红色unsigned char green = 0;    // 绿色unsigned char blue = 128;   // 蓝色// 合成颜色值:alpha(8位) + red(8位) + green(8位) + blue(8位)unsigned int color = ((unsigned int)alpha << 24) |((unsigned int)red << 16) |((unsigned int)green << 8) |blue;printf("ARGB颜色值:0x%08X\n", color); // 输出:0xFFFFFF80return 0;
}

📌 结束语

本篇涵盖C语言基础语法与运算符核心知识,后续将逐步深入STM32开发。建议重点掌握:

  1. 数据类型与内存占用的底层逻辑
  2. 位运算符在嵌入式开发中的高频应用
  3. 表达式求值顺序与运算符优先级

🔥 订阅专栏持续学习:C语言到基于STM32的智能矿探小车
💬 欢迎点赞、收藏、留言讨论,一起攻克嵌入式开发!

http://www.dtcms.com/a/268452.html

相关文章:

  • Python实现优雅的目录结构打印工具
  • 自采集在线电脑壁纸系统源码v2.0 自适应双端
  • c语言中指针深刻且简单的理解
  • 【机器学习笔记Ⅰ】 8 多元梯度下降法
  • mysql的JDBC和连接池
  • 单片机总复习
  • 升级AGP(Android Gradle plugin)和gradle的版本可以提高kapt的执行速度吗
  • CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706
  • RSTP 拓扑收敛机制
  • 【人工智能】AI Agent 技术与应用场景解析
  • 【机器学习笔记Ⅰ】9 特征缩放
  • 零基础 “入坑” Java--- 八、类和对象(一)
  • 【HarmonyOS】鸿蒙6 CodeGenie AI辅助编程工具详解
  • Vue2 重写了数组的 7 个变更方法(原理)
  • PanoSAM:使用 Meta Segment Anything 模型对全景图像中的点云数据进行无监督分割
  • 模型训练、部署遇到的问题
  • 鼓式制动器的设计+(说明书和CAD【6张】 - 副本➕降重
  • jenkins安装
  • contain:paint和overflow:hidden的区别
  • C++高频知识点(二)
  • 9. 【Vue实战--孢子记账--Web 版开发】-- 账户账本管理(二)
  • 2025.7.6总结
  • android 获取手机配对的蓝牙耳机的电量
  • Flutter 项目开启 UI 层级虚线(UI Guides)
  • 【C++】string类(二)相关接口介绍及其使用
  • 植物大战僵尸杂交重制版1.0,经典焕新,重燃策略塔防之火
  • Altium Designer使用入门(非精通)教程 第三章(PCB绘制)
  • 前端开发深度剖析:核心痛点、隐藏陷阱与系统解决方案
  • 【MySQL进阶】MySQL架构
  • 【HarmonyOS】鸿蒙应用开发Text控件常见错误