news 2026/5/7 19:19:36

嵌入式Day4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式Day4

复合赋值运算符

+=

-=

*=

/=

%=

int main() { int a = 20; a += 10; printf("a += is %d\n",a); a = 20; a -= 5; printf("a -= is %d\n",a); a = 20; a *= 5 +3 ;// 由于运算符 优先级 一定是计算 5+3 在赋值 printf("a *= is %d\n",a); a = 20; a /= 3 ;// printf("a /= is %d\n",a); a = 20; a %= 3 ;// printf("a %%= is %d\n",a); return 0; }
逗号运算符

使用逗号运算符连接的式子,逗号表达式。 从左向右,一次计算表达式的。最终整个表达式的值,是最后一个 的值。

sizeof 运算符

计算变量,常量,表达式,数据类型 ,在内存需要占用字节数。

int main() { int a = 0 ; a = (1,2,3*4,5) ; printf("a is %d\n",a); // 这个地方,是函数的参数传递 ,不是逗号表达式 printf("%d, %d, %d ,%d,%d\n",1,2,3,4,5); printf("int size is %lu\n",sizeof(int)); // 可以使用类型 ,计算内存大小 printf("a size is %lu\n",sizeof(a)); // 可以使用变量,计算内存大小、 printf("a+1 size is %lu\n",sizeof(a+1));// 由对应的数据类型 return 0; }
运算符的优先级

运算符

1)需要几个操作数。 单目,双目,三目

2)优先级 。共15级。 数字越小,优先级越高。

圆括号 > 单目 >双目 > 三目> 赋值 > 逗号

算术运算符 >移位运算符 >关系运算符 > 位运算 > 逻辑运算符

3)结合方向(结合率) 。 从左到右; 从右至左。 大部分的都是从左至右。

右结合 ,单目运算符,赋值运算符,条件运算符(?:)

第二章 输入输出函数

#include <stdio.h> 系统提供的输入输出函数(功能)的说明

输入输出的参考点,是计算机系统的内存。 如果数据进入内存,输入。 如果数据是从内存中输出,输出。

函数接口,包含 函数名,函数的参数。

函数名功能备注
putchar传入一个需要输出到屏幕的字符 ,并显示
int putchar(int c);
putchar('h');
putuchar('h'+1);
char c ='o';putchar(c);
getchar从终端接收一个字符,
int getchar(void);
char c =0;
c = getchar();

getchar(); // () 不可以省略,表示函数的调用。

调用过程中,需要保证,参数匹配问题。参数的数据类型,个数要对上,

大部分函数使用完后,是有结果的。 只要不是void类型的函数。

函数名功能备注
printf向终端格式化输出字符串
int printf(const char *format, ...);
scanf从终端按照格式输入数据
int scanf(const char *format, ...);

printf

int main() { #if 0 // int printf(const char *format, ...); printf("hello world\n");// char* 字符串 -》 ""就是字符串 printf("h\be\n"); // \b 退格 printf("1\t2\t3\n"); printf("4\t5\t6\n"); printf("7\t8\t9\n"); printf("hello \"w\"orld\n"); // hello "w"orld printf("\\n\n"); // 屏幕输出 \n printf("50%%\n"); #endif int num = 20 ; printf("num is %d, oct %o, hex %x\n",num,num,num); printf("num oct %#o, hex %#x\n",num ,num); char c = 'A'; printf("char is %c, ascii 编码 %d\n",c,c); double do_var = 3.14456456; printf("double is %f\n",do_var); printf("double is %lf\n",do_var); printf("double is %e\n",do_var); //科学计数方式 printf("double .2f is %.2f\n",do_var); //显示小数点后2位 printf("%s,你好!\n","张三"); // %s 显示字符串 printf("显示 num 在内存中的地址:%p\n", &num); // & 获得num变量的内存地址 printf(" %5d, %5d,%5d\n",1,100,-20); // 数据宽度 位5 printf(" %05d, %05d,%05d\n",1,100,-20); // 空白处,用0 填充 printf(" %-5d, %-5d,%-5d\n",1,100,-20); // 左对齐 return 0; } 常用的非控制字符 // 转义字符, 本质是一个字符 \n 换行符 \b 退格键 "h\be"; \t 制表符 \r 光标回到本行的开头 \" 输出 " \\ 输出 \ %% 输出一个% 带控制字符的, 有几个控制字符,就需要传递几个参数 。传递的参数数据类型要和控制字符匹配 %d 有符号的整形数据 %c 按ascii码对应的图形输出 %f float 类型, double %lf double 类型 %s 输出字符串 %u 无符号的整形数据 %ld 有符号的整形数据 long %lu 无符号的整形数据 long %p 显示变量的地址。 %o 8进制输出 %x 16进制输出 %e ,显示浮点数的,以科学计数法方式显示 %#o, 以8进制输出 ,带前缀 0; %#x, 以16进制输出 ,带前缀 0x 扩展形式 %nd n:可以是一个数字 指定数据的显示宽度 ,高位不空格 printf(" %5d, %5d,%5d\n",1,100,-20); 1, 100, -20 %.mf m 指定显示浮点数,小数点后的位数 double do_var = 3.14456456; printf("double .2f is %.2f\n",do_var); double .2f is 3.14 %-nd , -号 表示显示数据的时间,左对齐 %0nd, 如果数据的宽度,不够,使用 0 填充空白处

scanf

int main() { // int scanf(const char *format, ...); int num = 0 ; int num2 = 0 ; printf("请输入2个数:"); 在进行scanf 数据接收的时候,scanf 会严格按照给定格式,进行匹配。如果格式匹配失败,放弃接收 //scanf("请输入一个数%d",&num); //&num 表示num的地址, scanf 可以一次性,接收多个变量。 变量和变量之间 使用 tab 键,回车键,分隔。 scanf("%d%d",&num,&num2); // tab 键,回车键 printf("num is %d, num2 %d\n",num,num2); return 0; }

在scanf 的接收过程中,尽量少出现非控制字符

==// 错误的演示 不要加\n== scanf("%d==\n==",&num); // 在scanf 格式化接收中,不要出现\n,会导致数据无法正常接收

如果接收的是普通变量的话,变量前都要加 & ,获得变量的地址。

scanf("%d",==&==num);

float d_var = 0.0; printf("输入一个double :"); scanf("%lf",&d_var); // %lf 变量的类型必须是double 输入一个double :3.112379127391872923 f_var is 0.000000 *** stack smashing detected ***: <unknown> terminated 栈区崩溃 ,栈区存储临时变量的内存区域 \Aborted (core dumped)
char name[30]={0}; // 数组 printf("输入一个人名:"); scanf("%s",name); // 对数组类型,不需要要加 & printf("%s,你是个老六\n",name);

在scanf 接收数据后,建议都加一个==getchar== ,接收输入缓冲区的\n

int main() { int num = 0; printf("input one num:"); scanf("%d",&num); printf("num is %d\n",num); char c = 0; printf("input one char:"); scanf("%c",&c); // 会发现,没有输入,就结束了。 printf("c is %c\n",c); return 0; } 改进 int num = 0; printf("input one num:"); scanf("%d",&num); printf("num is %d\n",num); getchar(); // 建议在scanf 后 ,都加一个getchar ,接收输入缓冲区中的\n char c = 0; printf("input one char:"); scanf("%c",&c); // 等待接收 printf("c is %c\n",c); return 0;

字符串的输入和输出函数

函数名功能备注
puts向终端输出一个字符串
int puts(const char *s)
参数传入,变量,常量都行
在字符串的最后,会加入\n
gets从终端接收一个字符串
char *gets(char *s);
参数传入,变量(数组)
在输入内容的时候,不要越界。越界后行为是不确定。
int main() { puts("hello ,ni hao "); //会加入换行符 char str[256]="nihao, zhangsan"; puts(str); scanf("%s",str); printf("nihao,%s\n",str); return 0; }
gets int main() { char name[5]={0}; printf("input person name"); // 输入的内容大于 4字符以上,就会出现越界 gets(name); //阻塞,等待接收数据 printf("%s, hello\n",name); return 0; } linux@ubuntu:~/20260422/02stdio$ ./a.out input person name张三 张三, hello 就会出现越界,后的现象 。 *** stack smashing detected ***: <unknown> terminated Aborted (core dumped)

附录

运算符

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 19:16:28

观察 Taotoken 用量看板如何帮助团队清晰掌握 API 成本分布

观察 Taotoken 用量看板如何帮助团队清晰掌握 API 成本分布 对于依赖大模型 API 进行开发的团队而言&#xff0c;成本控制与预算管理是项目可持续运营的关键。直接使用多个模型供应商的原生 API&#xff0c;账单分散、统计维度单一&#xff0c;往往导致成本构成模糊&#xff0…

作者头像 李华
网站建设 2026/5/7 19:07:35

达梦数据库修改参数方法

一般用sp_set_para_value()修改新版本达梦支持alter system修改&#xff0c;很类似oracle的命令具体语法树尝试一下 19:42:34 SYSDBALOCALHOST:5236> alter system set dmsql_et_cnt50000 spfile; DMSQL 过程已成功完成 已用时间: 11.967(毫秒). 执行号:13217. 19:42:48 SY…

作者头像 李华
网站建设 2026/5/7 19:05:29

终极解决方案:高效实现Android手机USB网络共享到Mac的完整指南

终极解决方案&#xff1a;高效实现Android手机USB网络共享到Mac的完整指南 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 你是否曾经在Mac上尝试连接Android手机的网络共享&#xff0c;却遇…

作者头像 李华
网站建设 2026/5/7 19:04:29

SpringBoot 六大核心应用场景,全覆盖后端开发

目前主流的开发模式全部为前后端分离&#xff0c;前端使用 Vue、React、uniapp 开发页面、小程序、APP&#xff0c;后端不需要编写页面&#xff0c;只需要提供标准化的 RESTful API 接口。SpringBoot 内置 SpringMVC&#xff0c;零配置即可实现接口开发、参数校验、全局异常处理…

作者头像 李华
网站建设 2026/5/7 19:03:30

Emacs AI编程接口:统一多模型后端,实现工程化开发工作流

1. 项目概述&#xff1a;一个为Emacs设计的统一AI编程接口 如果你和我一样&#xff0c;是个在Emacs里泡了多年的老用户&#xff0c;同时又对各种新兴的AI编程助手&#xff08;比如Claude Code、GitHub Copilot CLI、OpenAI Codex&#xff09;感到好奇&#xff0c;那你一定也经…

作者头像 李华
网站建设 2026/5/7 19:00:34

存内计算技术演进与边缘AI能效优化

1. 存内计算技术演进与能效挑战在边缘AI计算领域&#xff0c;能效已成为比峰值算力更关键的指标。传统冯诺依曼架构中&#xff0c;数据在存储器和处理器间的频繁搬运导致"内存墙"问题——据实测数据&#xff0c;32位浮点数的搬运能耗可达计算能耗的200倍。存内计算(C…

作者头像 李华