嵌入式学习-Day2
数据截断:通常出现在赋值场景,将数据类型大的变量赋值给数据类型较小的变量(对于浮点数转换为整数,只保留整数位)溢出危害无法杜绝,必须保持编写敏感,在编写代码时,充分考虑数据的取值范围,使用合适的数据类型。:在表达式中,运算符两侧混有不同类型的常量及变量中,他们都要转换成同一类型,再转换。|| :一个操作数为真,结果就为真,两个操作数都为假,结果才为假;&&:两个操作数都为真,结果才为真,一个操作数
C语言day2
位运算符:
x << n;表示把x的每一位向左平移x位,右边空位补0,

>>右移表示把每一位向右平移n位,
当x为无符号数时,左边空位补0;
当x为有符号数时,左边空位补最高数值;


int main(void) {
volatile int8_t a = 0x8F;
volatile int8_t b = 0x8F;
a >>= 2;
b >>= 2;
return 0;
}
练习:获取0x1413061D的日期
1.获取日期
2.获取月份
3.获取年份低位
4.获取年份高位
uint32_t date = 0x1413061D;//0001 0100 0001 0011 0000 0110 0001 1101
uint8_t day = date;//天
date = date >> 8;
uint8_t month = date;//月
date = date >> 8;
uint8_t year_low = date;//年低位
date = date >> 8;
uint8_t year_long = date;//年高位
练习2:给定一个变量值a,不改变其他的值,将第六位置1
00001111→01001111
可以使用按位或|,0100 0000=(0000 0001<< 6)可写成 a |= (0x01 << 6);
printf函数:使用时头文件添加#include <stdio.h>,通过printf可以向屏幕、串口等输出数据,用于调试

- 左边字符串中的参数必须跟右边格式符的参数个数一样
- %04d:输出宽度为4,而printf("the price is %04d.,14");“14”宽度为2,多出的两个宽度用0填补
- %。2f:输出两位小数

数据运算类型转换:(类型)表达式
volatile uint8_t m = 5;
printf ("(float)m/2 = %f\n",(float)m/2);//m是整形扩充为浮点
数据扩充:参考年月日
printf("m/2.0f = %f\n",m/2.0f);//隐形类型转换
数据截断:通常出现在赋值场景,将数据类型大的变量赋值给数据类型较小的变量(对于浮点数转换为整数,只保留整数位)
数据扩充:在表达式中,运算符两侧混有不同类型的常量及变量中,他们都要转换成同一类型,再转换。
- 对于隐式类型转换,数据范围小的像数值范围大的转换
- 负整数在像数值类型大的转换时(unsigned或signed)扩充时,扩充为都会填充1.

- 操作数全为有符号数时,即使类型大小不一样,没有问题
- 操作数全为无符号数时,即使类型大小不一样,没有问题
- 操作数混合的有符号数,无符号数,并且有正数,有负数,很有可能会出问题。
在编写代码时要用同符号类型(同为有符号或者无符号)进行运算,可以避免正负带来的错误问题,减少隐性难以发现的错误。
数据溢出:当计算机中要储存的数值超过了该类型可以表示的范围就会发生溢出。
unsigned整数溢出:溢出后的数会该类型最大值加一做模运算,
signed整数溢出:不受控
溢出危害无法杜绝,必须保持编写敏感,在编写代码时,充分考虑数据的取值范围,使用合适的数据类型。
int32_ t date = 0;
int16_t d1 = 1;//0x0001
int16_t d2 = -1;//0xFFFF
date = d1;
date = date << 16|d2;//能否出现0x0001FFFF? d1左移16位 0000 0000 0000 0001 0000 0000 0000 0000
//能d2为-1,转换为int_32类型 1111 1111 1111 1111 1111 1111 1111 1111。按位或操作后,结果为 0000 0000 0000 0001 1111 1111 1111 1111,即 0x0001FFFF。
bool数据类型:只有1和0两种true真false假 (在使用添加头文件#define <stdbool.h>)
任何非0数值转换为bool类型都为1
关系运算符:<,<=,>=,>,==,!=(优先级)

//如果要判断变量数值所在区间
if (8<a<10)//不对
if (a>8 && a<10)//这样
//==是等于,=是赋值
if(a == 9)//可改写 if (9 == a)
逻辑运算符:!,&&,||
&&:两个操作数都为真,结果才为真,一个操作数为假,结果就为假;
|| :一个操作数为真,结果就为真,两个操作数都为假,结果才为假;
- 在编写已经包含&&的表达式,将最有可能为假的子表达式写在表达式的最左边。
- 在编写已经包含 || 的表达式,将最有可能为假的子表达式写在表达式的最左边。
if 条件语句



数电day2
mos管基本介绍:https://blog.csdn.net/qq_40693786/article/details/134439817
基本逻辑门电路
TTL逻辑门电路
CMOS逻辑门:高速,低功耗
(没学完,没看懂)
ADday2:画继电器原理图

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐
所有评论(0)