[嵌入式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.mzph.cn/news/602238.shtml

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

相关文章

[NAND Flash 5.3] QLC NAND 已来未热,是时候该拥抱了?

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< 全文 3600 字。 前言 伴随着闪存芯片的发展趋势,现如今便宜、大容量的SSD基本上都需要上QLC闪存芯片了。一时间QLC有山雨欲来之势,大容量QLC SSD的普及…

Geoserver扩展发布MySQL视图功能

Geoserver中并不自带mysql数据发布功能&#xff0c;需要扩展外部插件。 1、示例以geoserver-2.20.5版本进行演示&#xff0c;所以MySQL插件需要到该版本对应的“Extensions”标题下查找&#xff0c;下载地址&#xff1a;GeoServer&#xff0c;详见下图 2、选择MySQL进入下载页…

Linux第11步_解决“挂载后的U盘出现中文乱码”

学习完“通过终端挂载和卸载U盘”&#xff0c;我们发现U盘下的中文文件名会出现乱码&#xff0c;现在讲解怎么解决这个问题。其实就是复习一下“通过终端挂载和卸载U盘”&#xff0c;单独讲解&#xff0c;是为了解决问题&#xff0c;一次性搞好&#xff0c;我们会不长记性。 在…

【100条mysql常用命令】

当然&#xff0c;这里是一些常用的 MySQL 命令列表&#xff0c;用于管理数据库和执行各种查询操作&#xff1a; SHOW DATABASES; - 显示所有数据库CREATE DATABASE database_name; - 创建新数据库USE database_name; - 选择要操作的数据库DROP DATABASE database_name; - 删除…

数据在内存中的存储之大小端

今天也是努力学编程&#xff0c;敲代码的一天&#xff01; 1.什么是大小端 其实超过一个字节的数据在内存中存储的时候&#xff0c;就有存储顺序的问题&#xff0c;按照不同的存储顺序&#xff0c;我们分为大端字节序 存储和小端字节序存储&#xff0c;下面是具体的概念: &…

HIL(硬件在环)技术汇总梳理

HIL&#xff08;Hardware-in-the-Loop&#xff09;测试领域的知名公司有dSPACE、NI、Vector和speedgoat等&#xff0c;以下是针对这几家HIL技术的对比分析&#xff1a; 文章目录 dSPACE NI Vector speedgoat 总结 dSPACE dSPACE成立于1988年&#xff0c;起源自德国的帕德…

vue3项目中axios的常见用法和封装拦截(详细解释)

1、axios的简单介绍 Axios是一个基于Promise的HTTP客户端库&#xff0c;用于浏览器和Node.js环境中发送HTTP请求。它提供了一种简单、易用且功能丰富的方式来与后端服务器进行通信。能够发送常见的HTTP请求&#xff0c;并获得服务端返回的数据。 此外&#xff0c;Axios还提供…

C++学习笔记(二十二):c++ 隐式转换与explicit关键字

c允许编译器对代码执行一次隐式转换。 #include<iostream> #include<string>class Entity { public:std::string name;int age;Entity(int x) {age x;}Entity(std::string x){name x;} }; void PrintEntity(Entity e) {std::cout << e.age << "…

buuctf 逆向 number_game

这是一题二叉树逆向 正常递归建立树的代码为&#xff1a; VOID BinaryTree::BuildTree(Tree*& root) {cout << "输入-1即结束" << endl;INT Val 0;cin >> Val;if (Val -1)return;root new Tree(Val);cout << "请输入" &l…

FSMC—扩展外部SRAM

一、SRAM控制原理 STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间&#xff0c;但当程序较大&#xff0c;内存和程序空间不足时&#xff0c;就需要在STM32芯片的外部扩展存储器了。STM32F103ZE系列芯片可以扩展外部SRAM用作内存。 给STM32芯片扩展内存与给…

基于云平台技术的自动泊车浅谈

基于云平台技术的自动泊车浅谈 一、引言 自动泊车技术是当前汽车技术的重要发展方向之一&#xff0c;它能够帮助驾驶员自动完成泊车操作&#xff0c;提高驾驶安全性。基于云平台技术的自动泊车创新&#xff0c;将为自动泊车技术的发展带来新的突破。 二、云平台技术概述 云…

【计算机网络】TCP原理 | 可靠性机制分析(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程、计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

sensor 点亮出图后,画面全黑是为什么?

同事在点一个思特威的 sensor sc035hgs&#xff0c;这个 sensor 主要负责数据采集&#xff0c;然后给到后面的 NN&#xff08;神经网络&#xff09;去做处理。 点亮出图后&#xff0c;画面很黑&#xff0c;如下图所示&#xff1a; 因为没拿到板子&#xff0c;只能盲猜&#xf…

Python 注释的方法

在Python中&#xff0c;有两种常见的注释方法&#xff1a; 单行注释&#xff1a;使用#符号来注释一行代码。在#符号后面的内容将被视为注释&#xff0c;不会被解释器执行&#xff0c;如&#xff1a; # 这是一个单行注释 print(hello world!) # 打印字符串多行注释&#xff1…

面试官:说说HashMap和HashTable的区别

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

与CSDN相识的第一年

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

算法日志的存在核心在于搭建自检系统

"相信每一个人执行与日志有关的任务都会遇到这样难题吧&#xff1f;长达几万行的日志&#xff0c;如果我们单纯用肉眼去一个个排查&#xff0c;那么恐怕所耗费的时间是以天为计量单位了。当然这是一种比较夸张的情况&#xff0c;根据我的项目经验&#xff0c;正常情况是十…

每日一博 - 多租户技术及其三种数据存储策略

文章目录 概述应用程序隔离数据隔离小结 概述 多租户技术&#xff08;Multi-Tenant Technology&#xff09;是软件即服务&#xff08;SaaS&#xff09;架构中的一项核心技术&#xff0c;允许单一软件应用或服务同时服务于多个客户&#xff08;即“租户”&#xff09;&#xff…

作为产品经理,如何分析和管理产品需求?

实际工作中&#xff0c;需求分析和需求管理能力是产品经理的基础能力&#xff0c;那么该如何进行需求分析和管理呢&#xff1f; 需求分析阶段的核心可以总结为两句话&#xff1a;“这个需求能不能做&#xff1f;做成什么样&#xff1f;”。 一、需求收集 需求收集环节需要针…

软件测试|Python函数参数之必传参数、默认参数、可变参数、关键字参数的详细使用

在Python中&#xff0c;函数参数是定义在函数头部的变量&#xff0c;用于接收传递给函数的数据。Python函数参数有四种类型&#xff1a;必传参数、默认参数、可变参数和关键字参数。每种类型都有不同的使用方式和适用场景。本文将详细介绍这四种函数参数的使用方法。 Python函…