【☠️️社死现场の老板来了☠️️】小伙,搞C语言嵌入式开发这么久了,还不知道u8、u16、u32、s8、s16、s32是什么意思啊?

【☠️️社死现场の老板来了☠️️】小伙,搞C语言嵌入式开发这么久了,还不知道u8、u16、u32、s8、s16、s32是什么意思啊?首先开门见山:u8是unsignedchar,u16是unsignedshort,u32是unsignedlong;s8是signedchar,s16是signedshort,s32是signedlong。然后娓娓道来:显而易见,u就是unsigned的缩写,s就是signed的缩写,8就表示8个二进制位(一个字节),16就表示16个二进制位(两个字节),32就表示32个二进制位(四个字节)。这样写的目的,是为了提高跨平台的移植性与兼容性。不同平台数据类型定义都不尽相同,一套代码要想.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在这里插入图片描述

老板来了:

糖糖小伙,你搞C语言嵌入式开发这么久了,我来考考你u8、u16、u32、s8、s16、s32是什么意思啊?你要是回答的让我满意了,给你升职加薪,从此走上人生巅峰呦~

报告老板:

作为C语言后入式开发之王,额、、、说错了。呸,呸,呸,C语言嵌入式开发的皇者,这点小问题怎么会难倒本帅比呢?

首先开门见山,一点也不慌:

u8是unsigned char,u16是unsigned short,u32是unsigned long;s8是signed char,s16是signed short,s32是signed long。

然后娓娓道来,是时候展示一波实力了:

  • 显而易见,u就是unsigned的缩写,s就是signed的缩写,8就表示8个二进制位(一个字节),16就表示16个二进制位(两个字节),32就表示32个二进制位(四个字节)。
  • 这样写的目的,是为了提高跨平台的移植性与兼容性。不同平台数据类型定义都不尽相同,一套代码要想兼容各个平台,必须要达到数据类型一致,防止出现二义问题(例如int在VC6.0里就占用4个字节,但是在Turbo C2.0里就占2个字节,使用u16就统一了定义,确保跨平台的移植性;另外VC中long int 和 int是没有区别的,两种类型均用4个字节存放数据)。
  • 使用typedef关键字来为变量起别名方便了大家的编码工作。这种写法简练,意义明确,我们在标准头文件中还是以后的编程实践中都会大量使用到。

附录整型数据类型:

数据类型
注意,超长整型和无符号超长整型是在 C++11 中引入的。

番外篇:long类型到底是4字节还是8字节

不过肯定有人提出异议了,long类型在linux64位系统下用gcc9.1编译器环境下就是8个字节啊!唉,我只能说具体问题具体分析了,不同调试环境下部分类型会有差异(32位系统与win64环境下,long为4字节;linux64环境下,long为8字节),我们最靠谱的就是使用**sizeof()**关键字打印一下长度,这个肯定最准了,万变不离其宗!

#include <iostream>
using namespace std;
int main() { 
   
    cout << "char size is:" << sizeof(char) << endl;
    cout << "short size is:" << sizeof(short) << endl;
    cout << "int size is:" << sizeof(int) << endl;
    cout << "long size is:" << sizeof(long) << endl;
    cout << "long long size is:" << sizeof(long long) << endl;
}

最后献上示例:

stdint.h文件:

 /* TYPE DEFINITIONS */
typedef signed char int8_t;
typedef short int16_t;
typedef long int32_t;
typedef long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
typedef unsigned long long uint64_t;

stm32f10x.h文件 中:

/*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */
typedef int32_t  s32;
typedef int16_t s16;
typedef int8_t  s8;
typedef const int32_t sc32;  /*!< Read Only */
typedef const int16_t sc16;  /*!< Read Only */
typedef const int8_t sc8;   /*!< Read Only */
typedef __IO int32_t  vs32;
typedef __IO int16_t  vs16;
typedef __IO int8_t   vs8;
typedef __I int32_t vsc32;  /*!< Read Only */
typedef __I int16_t vsc16;  /*!< Read Only */
typedef __I int8_t vsc8;   /*!< Read Only */
typedef uint32_t  u32;
typedef uint16_t u16;
typedef uint8_t  u8;
typedef const uint32_t uc32;  /*!< Read Only */
typedef const uint16_t uc16;  /*!< Read Only */
typedef const uint8_t uc8;   /*!< Read Only */
typedef __IO uint32_t  vu32;
typedef __IO uint16_t vu16;
typedef __IO uint8_t  vu8;
typedef __I uint32_t vuc32;  /*!< Read Only */
typedef __I uint16_t vuc16;  /*!< Read Only */
typedef __I uint8_t vuc8;   /*!< Read Only */

使用的头文件示例:

#ifndef _MINTS_TYPE_H_
#define _MINTS_TYPE_H_

#ifndef _MSC_VER
#include <stdint.h>
#endif

#ifdef __cplusplus
extern "C" { 
   
#endif /* __cplusplus */

/* Type definition */
/*----------------------------------------------------------------------------- System public files are strictly prohibited to modify ------------------------------------------------------------------------------*/

/* windows visual studio compiler */
#if defined(_MSC_VER)
typedef signed char     s8;
typedef unsigned char   u8;
typedef signed short    s16;
typedef unsigned short  u16;
typedef signed int      s32;
typedef unsigned int    u32;
typedef __int64         s64;
typedef unsigned __int64 u64;

/* gcc, xcoder, intel or other C99 support compiler */
#else 
typedef int8_t          s8;
typedef uint8_t         u8;
typedef int16_t         s16;
typedef uint16_t        u16;
typedef int32_t         s32;
typedef uint32_t        u32;
typedef int64_t         s64;
typedef uint64_t        u64;

#endif //_MSC_VER

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* _MINTS_TYPE_H_ */

引经据典:

http://c.biancheng.net/cpp/html/100.html
http://c.biancheng.net/view/1318.html
http://www.cplusplus.com/reference/cstdint/
https://www.keil.com/dd/docs/arm/st/stm32f10x/stm32f10x.h
http://www.qnx.com/developers/docs/6.4.1/dinkum_en/c99/stdint.html>

结束寄语

有关嵌入式数据类型的介绍就到此结束啦!下篇博文与各位再见面~

写博不易,如蒙厚爱,赏个关注,一键三连~~点赞+评论+收藏???,感谢您的支持~~

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181494.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 2021.7idea激活码_在线激活

    (2021.7idea激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • golang 2021激活码【2021免费激活】

    (golang 2021激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 用于重新编译的工具和命令

    用于重新编译的工具和命令

    2021年11月24日
  • IDEA热部署不生效解决方案

    IDEA热部署不生效解决方案今天尝试热部署,没想到弄了半天没反应,最后经查阅发现此问题,希望同样问题的这个没配置的去添加试下,希望能帮到你第一步pom文件引入坐标&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-devtools…

  • 5.4 图层样式面板的实例讲解 [原创Ps教程][通俗易懂]

    5.4 图层样式面板的实例讲解 [原创Ps教程][通俗易懂]原文:http://coolketang.com/staticPhotoshop/5a98d4abac502e0032ef2fae.html1.本节课程将为您演示,[图层样式面板]的使用。为了方便使用图层的各种样式,首先点击工具箱中的[横排文字工具],创建一个文本图层。 2.然后在画面的适当位置上点击,确定输入文字的起点位置。 3.接着输入一行文字。 4.最后点击对号图标,完成文字的输入。…

  • 手眼标定之基本原理

    手眼标定之基本原理文章目录一前言二Eye-in-Hand2.1基础知识准备2.2Eye-in-Hand基本原理三跋原文首发于微信公众号【视觉IMAX】。一前言机器人的视觉系统分为固定场景视觉系统和运动的「手-眼」视觉系统。摄像机与机器人的手部末端,构成手眼视觉系统。根据摄像机与机器人相互位置的不同,手眼视觉系统分为Eye-in-Hand系统和Eye-to-Hand系统。Eye-in-Hand…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号