首页 > 其他分享 >【嵌入式C语言】常用关键字及运算符操作

【嵌入式C语言】常用关键字及运算符操作

时间:2024-11-29 16:32:56浏览次数:8  
标签:char int enum unsigned 嵌入式 运算符 关键字 C语言 day

常用关键字及运算符操作

【重点】

  • 掌握C语言的常用关键字及其应用场景,使用技巧
  • 掌握位运算的典型操作
  • 掌握常用的逻辑操作

【难点】

  • when to do? how to do? why to do?
  • 熟悉常用运算符的典型操作,总结什么时候使用什么运算符

在这里插入图片描述

学习视频:
【嵌入式C语言】 https://www.bilibili.com/video/BV1RW411G7cr/?p=9&share_source=copy_web&vd_source=8af85e60c2df9af1f0fd23935753a933


关键字

关键字编译器 预先定义了一定意义的 字符串

int a;

C语言一共有32个关键字

杂项

sizeof

sizeof是关键字(不是函数调用):编译器给我们查看内存空间容量的一个标准

#include <stdio.h>

int main(void)
{
    int a;
    printf("sizeof(int) = %d\n", sizeof a);
    return 0;
}

在这里插入图片描述

return

return是返回的概念

数据类型

  • C 操作对象 :资源/内存(内存类型的资源,LCD缓存、LED灯)
  • C语言如何描述这些资源的属性呢?
    • 资源属性【大小】
    • 限制内存(土地)的大小,关键字

数据类型大小由编译器决定!

char

  • 硬件芯片操作的最小单位:1 bit
    1 bit 1/0

  • 软件操作的最小单位:8bit = 1Byte
    char a; bit a;

比如说网速10M,10Mbit/s / 8 = 1.25MB/s

应用场景:硬件处理的最小单位,单片机处理的最小单位
char buf[x];
int buf[x];
这样定义的两个数组,int类型会多接收,char类型才是接收硬件空间在软件体现的最小单位!

ASCII码表,用8bit来描述,2^8 = 256,能表示256个状态!

char a = 300; 这样就溢出了

int

int 类型的大小在不同系统中可能有所不同,通常占用 4 个字节(32 位系统)或 8 个字节(64 位系统)。在大多数情况下,我们会以 32 位系统为例。
- 32 位系统中,int 类型占用 4 个字节,即 32 个二进制位。

例如,二进制表示中的一个 int 变量可能是:00101011011100100011010101111001

  • int大小根据编译器来决定!

编译器有最优的处理大小,系统一个周期能接受的最大处理单位,int
32位的单片机 - 32bit - 4B - int
16位的单片机 - 16bit - 2B - int

  • char 类型占用1个字节,即8个二进制位。char 主要用于存储字符数据,通常使用ASCII编码,所以一个字节足够存储一个字符。

例如,二进制表示中的一个 char 变量可能是:01001001

需要注意的是,实际系统中可能有对齐等因素影响,导致实际占用的位数略多于上述的 8 倍或 4 倍。但通常情况下,我们使用的二进制表示方式是以字节为单位的。

进制表示

十进制(D) 八进制(O) 十六进制(H) 二进制(B)

12(十进制)

001 010(二进制)

8(十进制)

int a = 010 //8

int a = 0x10 //16

方法结果

二进制转十进制(按权展开法)

二进制转八进制(421 法)

二进制转十六进制(8421 法)

移位操作,左移几位就是乘以 2 的 n 次方

右移操作就是除以 2 的 n 次方,但是结果有小数时会被舍弃

以上都是有符号移位

long、short

特殊长度限制符

以上 char int long short 都为整形

unsigned,signed

unsigned、signed
无符号:数据
有符号:数字

内存空间的最高字节 是符号位 还是数据

unsigned int a.
char a,
char a = -1: 0xff (如果是有符号的负数,那么最高位一般都是符号位,永远都是 1,右移不会变成 0)

a>>1

unsigend char b= -1(如果是无符号的负数,那么最高位一般是数据,那么它右移就会变成 0,所以一般编程都会用无符号)

b>>1

float、double

数据的存储形式和整形的不相同

大小:

  • float 4B
  • double 8B

float 与 double 都为浮点型

void

void 一般不能用于计算等,一般用于占位,函数

void a++; 这样是错误的

void是一种语义,最常见的是函数返回值或者函数形参

自定义数据类型

C编译器默认定义的内存分配方式不符合实际资源的形式

自定义 = 基本元素的集合

struct

struct是元素之间的和

struct myabc{
	unsigned int a;
	unsigned int b;
	unsigned int c;
	unsigned int d;
};

struct myabc abc;

自定义的数据类型,一块连续的内存,四个四字节的空间

结构体的变量定义的顺序是有要求的

结构体的元素之间是递增的关系,每一个变量的起始地址都是上一个元素的尾地址。

用图来表示,每一个变量就是一个小方块~

在这里插入图片描述

union

共用体就是共用起始地址,申请的内存,变量之间是重叠的关系,是技巧型的代码~

在这里插入图片描述

union myabc{
	unsigned int a;
	unsigned int b;
};

union myabc abc;

enum

enum 是被命名整形常数的集合

enum在什么场景下使用?
enumerate 一一列举

用标签来描述常数,相当于程序里面的标志位

#define MON 1
#define TUE 2
#define WED 3

用enum来写,就相当于打包这些标签

enum week{
	Monday=0, Tuesday=1, Wednesday=2, 
	Thursday,Friday,
	Saturday,Sunday
};

编程实例:

#include <stdio.h>
enum week
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday,
    Friday,
    Saturday,
    Sunday
} day; // day是变量名称

int main(void)
{
    printf("sizeof(enum) is %lu\n", sizeof(day)); // 4
    printf("%d\n", Monday);                       // 1 定义从1开始

    day = Wednesday;     // 修改day的值
    printf("%d\n", day); // 3

    for (day = Monday; day <= Sunday; day++)
        printf("日期:%d\n", day); // 1 2 3 4 5 6 7
    return 0;
}

在这里插入图片描述
使用printf打印enum的大小,实际大小是4,4是32位2的,也就表示一位整形变量,按理说应该是7*4=28?
其实不是这样的,枚举变量就是一个整数,取里面定义的一个值而已,所以大小是4,有点像查表

枚举类型教程:https://www.runoob.com/cprogramming/c-enum.html

运用实例如下,enum是程序员与程序员之间沟通的方式,用名称标签代替数值!,不需要管数值是什么意思吗,调用标签即可实现功能~
在这里插入图片描述

typedef

typedef是数据类型的别名

定义两个变量

int a = 180;	//长度
int b = 3600;	//时间

如果改一下,改成如下写法,见名知意,len是长度,time是时间,一般后面加_t,表示是typedef

#include <stdio.h>

typedef int len_t;
typedef int mytime_t;
len_t a = 180;     // 长度
mytime_t b = 3600; // 时间

int main(void)
{
    printf("%d\n", a); // 180
    printf("%d\n", b); // 3600
    return 0;
}

逻辑结构

C语言中的三种基本结构是顺序结构、选择结构和循环结构。

  • if else 条件
  • swhitch(整型变量) case break;多分支
  • for循环(循环多少次),while循环(循环条件),do while循环(先循环一次)
  • continue、break、goto

类型修饰符

【嵌入式C语言】 【精准空降到 00:39】 https://www.bilibili.com/video/BV1RW411G7cr/?p=17&share_source=copy_web&vd_source=8af85e60c2df9af1f0fd23935753a933&t=39

标签:char,int,enum,unsigned,嵌入式,运算符,关键字,C语言,day
From: https://blog.csdn.net/weixin_63135906/article/details/144102160

相关文章

  • [Javascript] 等号运算符的运算和转换规则
    ==从上到下按照规则比较,直到能够得到确切结果为止:1.两端存在NaN,返回false2.undefined和null只有与自身比较,或者互相比较时,才会返回true,和其他原始类型比较返回false3.两端类型相同,比较值4.两端都是原始类型,转换成数字重新比较5.一端是原始类型,一端是对象类型,把对象......
  • C语言(十)---- 数据在内存中的存储
    数据在内存中的存储整数在内存中的存储整数的二进制的三种表示方法分别是原码,反码,补码对于整形来说,数据存放内存中存放的是补码,原因是补码可以将符号位和数值位统一处理,加法减法也是一样(cpu只有加法处理器)好处是:使用补码可以将符号位和数值域统一处理,并且因为原码和补码......
  • C语言:头文件和源文件模版
    template.h/**@Description:*@Author:*@version:*@Date:*@LastEditors:*@LastEditTime:*/#ifndef__xxx_H__#define__xxx_H//==============================================================================//Includefiles#ifdef......
  • 嵌入式开发之C语言学习笔记day12
    动态内存分配1.常用函数2.malloc函数的细节点2.1malloc创建空间的单位是字节2.2malloc返回的是void类型的指针,没有步长的概念,也无法获取空间中的数据,需要强转2.3malloc返回的不仅仅是首地址,没有总大小,最好定义一个变量记录总大小2.4malloc申请的空间不会自动消失,如果......
  • C语言进阶7:程序环境与预处理
    本章重点程序的翻译环境程序的执行环境详解:C语言程序的编译+链接预定义符号介绍预处理指令#define宏和函数的对比预处理操作符#和##的介绍命令定义预处理指令#include预处理指令#undef条件编译1.程序的翻译环境和执行环境在ANSIC的任何一种实现中,存在两个不同的环境......
  • C语言小白求助
    编写一个函数把字符串中的内容用其反序字符串代替。在一个完整的程序中测试函数,使用一个循环给函数提供输入值。编写程序如下:#include<stdio.h>#include<string.h>//declaresstrcmp()#include<stdlib.h>#include<ctype.h>#defineSIZE100char*s_gets(char*......
  • C语言——指针进阶
    1内存四区栈:先进后出堆:自由存储#include<stdio.h>#include<string.h>voidtest_one(){ 1.导致栈区内存溢出 intarray1[100000]; intarray2[100000]; intarray3[100000];//报错}voidtest_two(){ 2.字符串问题 charstr[]="sdfdsf"; char*......
  • c语言,批量处理文件,进行gzip压缩
    #include<stdio.h>#include<stdlib.h>#include<dirent.h>#include<sys/stat.h>#include<pthread.h>#include<unistd.h>#include<string.h>#include<libgen.h>#include<stdbool.h>#include<asser......
  • C语言常用的库函数总结(道友,看这个飞升吧)
    原文:C语言常用的库函数总结(道友,看这个飞升吧)-XT杂谈(yzre.cn)一,前言:因为c中的库函数种类非常多,所以我总结了我认为非常重要的库函数放在这里,希望大家可以熟记,早日走出新手村。我的顺序是按照一种新奇的顺序排列的,因为我认为你可能这样学会更加有利于你对C语言的理解,因为......
  • C语言第四部分(C语句)
    C语言C语句C程序是以函数为基本单位的。一个函数的执行部分是由若干条语句组成的。C语句都是用来完成一定的操作任务的C语句必须依赖于函数存在。C语句分类控制语句用于完成一定的控制功能①if()…else②for()…③while()…④do…while()⑤continue......