[嵌入式C][入门篇] 快速掌握基础2 (数据类型、常量、变量)

开发环境:

  1. 网页版:跳转
  2. 本地开发(Vscode):跳转

文章目录

  • 一、基本变量大小和范围
    • (1)在8位/32位单⽚机中:
      • 测试代码
      • 结果:64位机器
      • 结果:32位机器(单片机)无对齐限制
  • 二、 局部变量 全局变量 静态变量 常量
    • (1)局部变量
    • (2)全局变量
    • (3)静态变量 (static)
    • (4)常量 (const)
      • 宏定义也可以定义常量(#define)

在这里插入图片描述

一、基本变量大小和范围

(1)在8位/32位单⽚机中:

名称中文名大小(byte)范围格式化符号
(<4byte的都可以使用%d)
char字符1-128 ~ 127%c
short短整型2-32768 ~ 32767%d
int整型4-2147483648 ~ 2147483647%d
long长整型4-2147483648 ~ 2147483647%ld
bool布尔型(逻辑型)40-1%u
float单精度浮点型4符号位:1bit, 整数部分:8bit,
小数部分:23bit
%f
double双精度浮点型8符号位:1bit, 整数部分:11bit,
小数部分:52bit
%lf
long long长长整型8-9223372036854775808~
9223372036854775807
%lld
enum枚举型4(可调整为1)%d
struct结合体型可变
(根据成员计算)
%u
union联合体型可变
(根据成员计算)
%u
*指针型4%u 或者 %x
unsigned无符号-----------------------------
unsigned char
(uint8_t)
字符10 ~ 255 或 0x00 ~ 0xFF%c
unsigned short
(uint16_t)
短整型20 ~ 65,535 或
0x00 ~ 0xFFFF
%u
unsigned int
(uint32_t)
整型40 ~ 4,294,967,295 或
0x00 ~ 0xFFFFFFFF
%u
unsigned long long
(uint64_t)
长长整型80 ~18,446,744,073,709,551,615 或
0x00 ~ 0xFFFFFFFFFFFFFFFF
%lld
long double12
10
16
暂无

暂无

符号位:1bit, 整数部分:16bit,
小数部分:111bit
%Lf 或 %lld 或 %llx

测试代码

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
enum {ONE = 1,
}num_t;typedef struct { // 字节对齐,按最大成员字节转换uint8_t a; // 编译器强制转换为uint16_tuint16_t b;
}xjq_t;typedef union { // uint8_t buff[8]; // 如果buff>pack,则以此为准,8bytestruct {uint8_t a;  // 1 byteuint16_t b; // 2 byteuint32_t c; // 4 byteuint32_t d; // 4 byte}pack; // 共计 11字节, 编译对齐后,12byte
}lisun_t;int main () { // \t 代表tabprintf("char:\t%d byte\r\n", sizeof(char));printf("short:\t%d byte\r\n", sizeof(short));printf("int:\t\t%d byte\r\n", sizeof(int));printf("long:\t%d byte\r\n", sizeof(long));printf("bool:\t%d byte\r\n", sizeof(bool));printf("float:\t%d byte\r\n", sizeof(float));printf("double:\t%d byte\r\n", sizeof(double));printf("long long:\t%d byte\r\n", sizeof(long long));printf("\r\n");printf("enum:\t%d byte\r\n", sizeof(num_t));printf("struct:\t%d byte\r\n", sizeof(xjq_t));printf("union:\t%d byte\r\n", sizeof(lisun_t));printf("\r\n");printf("uint8_t:\t%d byte\r\n", sizeof(uint8_t));printf("uint16_t:\t%d byte\r\n", sizeof(uint16_t));printf("uint32_t:\t%d byte\r\n", sizeof(uint32_t));printf("uint64_t:\t%d byte\r\n", sizeof(uint64_t));long double test = 0xFFFFFFFFFFFFFFFFull;printf("long double:\t%d byte, Max:%Lf\r\n", sizeof(long double), test);
}

结果:64位机器

在这里插入图片描述

结果:32位机器(单片机)无对齐限制

在这里插入图片描述

二、 局部变量 全局变量 静态变量 常量

特点:① 有变量名,变量值,有类型,占存储单元
   ② 变量名是一个存储地址

(1)局部变量

定义: 局部变量函数中定义的变量。函数执行完毕后,变量自动删除。
使用方式:int a = 3;

#include <stdio.h>
#include <stdint.h>
int main () {uint8_t test = 8; // 局部变量while(1);
}

(2)全局变量

定义:在函数外定义的变量就是全局变量。全局变量不会被删除。可以被外部文件使用。

#include <stdio.h>
#include <stdint.h>
uint8_t g_test = 8; // 全局变量
int main () {while(1);
}

(3)静态变量 (static)

定义:

  1. 局部变量和全局变量都可以作为静态变量。
  2. 不可被外部文件使用。
  3. 成为静态变量后,无法被删除,将永远存在。(不掉电的情况)
#include <stdio.h>
#include <stdint.h>
static uint8_t g_test = 8; // 静态全局变量
int main () {static uint8_t test = 8; // 静态局部变量 (这样的定义等同静态全局变量)while(1);
}

(4)常量 (const)

使用方式:const int a=3;

特点:① 常变量具有变量的属性,有类型,占存储单元,只是不允许修改值
   ② 常变量在芯片的堆区。

#include <stdio.h>
#include <stdint.h>
const uint8_t g_test = 8; // 全局常量 (全部函数均可使用)
int main () {const uint8_t test = 8; // 局部常量 (作用域仅限本函数)while(1);
}

宏定义也可以定义常量(#define)

使用方式:#define PI 3.1416
特点:① 对符号常量的名字是不分配存储单元,PI只是临时变量
   ②预编译后,符号所在的位置均变为符号常量的值

#include <stdio.h>
#include <stdint.h>
#define  PI  3.1416
const uint8_t g_test = PI; // 全局常量 (全部函数均可使用)
int main () {const uint8_t test = PI; // 局部常量 (作用域仅限本函数)while(1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超实用的测试万能法则 —— 帕累托分析!

20/80原则来源于意大利经济学家维弗雷多•帕累托&#xff08;Villefredo Pareto&#xff09;提出的财富占比帕累托原则&#xff1a;80%的财富是掌握在20%的人手中的&#xff0c;而余下的80%的人只占那剩余的20%财富&#xff0c;而后这个理论延伸为&#xff1a;至关重要的少数和…

程序员副业之无人直播助眠

介绍和概览 大家好&#xff0c;我是小黑&#xff0c;本文给大家介绍一个比较轻松简单的副业&#xff0c;无人直播助眠副业。 这个项目的核心就是通过直播一些助眠素材来赚钱。比如你可以放一些舒缓的雨声之类的&#xff0c;吸引观众进来。然后&#xff0c;咱们可以挂个小程序…

案例分析——如何优化跨境直播网络

跨境直播 风口已至 这些年越来越多商家加入直播带货行列&#xff0c;各种玩法日渐成熟。而TikTok作为当前国外最火爆的直播平台&#xff0c;不少卖家都会定期做TikTok直播引流&#xff0c;但时常会面临着远程访问导致直播画面模糊、卡顿掉线、延迟高&#xff0c;甚至可能限流黑…

YOLOv5改进 | Neck篇 | 利用Damo-YOLO的RepGFPN改进特征融合层

一、本文介绍 本文给大家带来的改进机制是Damo-YOLO的RepGFPN(重参数化泛化特征金字塔网络),利用其优化YOLOv5的Neck部分,可以在不影响计算量的同时大幅度涨点(亲测在小目标和大目标检测的数据集上效果均表现良好涨点幅度超级高!)。RepGFPN不同于以往提出的改进模块,其…

剧本杀小程序/APP搭建,增加玩家游戏体验

近年来&#xff0c;剧本杀游戏成为了年轻人娱乐的新方式&#xff0c;受到了年轻人的追捧。 剧本杀是一种新型的社交游戏&#xff0c;在游戏中&#xff0c;玩家不仅可以进行角色扮演&#xff0c;也能够交到好友&#xff0c;符合当下年轻人的生活模式。 小程序、app是当下剧本杀…

刚学C/C++,使用的是CLion,想要在同一个项目里面运行多个相互独立脚本?

前言&#xff1a; 正常来说&#xff0c;一般一个项目只会有一个程序入口点。C和C程序的入口点是main函数。在一个项目中&#xff0c;只能有一个main函数&#xff0c;否则编译器会不知道从哪个main函数开始执行。 但是&#xff0c;作为初学者&#xff0c;我就是想用CLio…

TMC4671闭环调试步进、伺服、音圈、永磁、无刷电机

一、IDE 连接开发板 下 面 讲 解 IDE 和 开 发 板 连 接 的 详 细 操 作 。 这 里 我 们 选 择 用 主 控 板 TMC671-EVALTMC6200-EVAL 开发板做讲解。其它型号的开发板也是大同小异 的操作步骤。 1&#xff0e;首先我连接好开发板&#xff0c;并给开发板上电 连接好的开发板如下…

bootstrap5实现宠物商店网站 Cat-Master

一、需求分析 宠物商店网站是指专门为宠物商店或宠物用品商家而建立的在线平台。这种网站的功能通常旨在提供以下服务&#xff1a; 产品展示&#xff1a;宠物商店网站通常会展示宠物食品、玩具、床上用品、健康护理产品等各种宠物用品的图片和详细信息。这样&#xff0c;潜在的…

JAVA中小型医院信息管理系统源码 医院系统源码

开发框架&#xff1a;SpringBootJpathymeleaf 搭建环境&#xff1a;jdk1.8idea/eclipsemaven3mysql5.6 基于SpringBoot的中小型医院信息管理系统&#xff0c;做的比较粗糙&#xff0c;但也实现了部分核心功能。 就诊卡提供了手动和读卡两种方式录入&#xff0c;其中IC读卡器使用…

李沐-《动手学深度学习》-- 01-预备知识

一、线性代数知识 1. 矩阵计算 a. 矩阵求导 ​ 当y和x分别为标量和向量时候&#xff0c;进行求导得到的矩阵形状&#xff0c;矩阵求导就是矩阵A中的每一个元素对矩阵B中的每一个元素求导 ​ 梯度指向的是值变化最大的方向 ​ 分子布局和分母布局&#xff1a; b. 常识 ax…

Mybatis分页插件PageHelper的配置和使用

文章目录 每页10条记录&#xff0c;取第一页&#xff0c;返回的是前10条记录每页10条记录&#xff0c;取第二页&#xff0c;返回的是第11条记录&#xff0c;到第20条记录&#xff0c; MySQL对分页的支持 简单来说MySQL对分页的支持是通过limit子句。请看下面的例子。 limit关键…

听GPT 讲Rust源代码--compiler(26)

File: rust/compiler/rustc_target/src/abi/call/mips.rs 在Rust源代码中的rust/compiler/rustc_target/src/abi/call/mips.rs文件是关于MIPS架构的函数调用ABI(Aplication Binary Interface)定义。ABI是编程语言与底层平台之间的接口规范&#xff0c;用于定义函数调用、参数传…