社死现场の老板来了小伙,搞C语言嵌入式开发这么久了,还不知道u8u16u32s8s16s32是什么意思啊?
Posted 谁吃薄荷糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了社死现场の老板来了小伙,搞C语言嵌入式开发这么久了,还不知道u8u16u32s8s16s32是什么意思啊?相关的知识,希望对你有一定的参考价值。
老板来了:
糖糖小伙,你搞C语言嵌入式开发这么久了,我来考考你u8、u16、u32、s8、s16、s32是什么意思啊?你要是回答的让我满意了,给你升职加薪,从此走上人生巅峰呦~
报告老板:
首先开门见山,一点也不慌:
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>
结束寄语
有关嵌入式数据类型的介绍就到此结束啦!下篇博文与各位再见面~
写博不易,如蒙厚爱,赏个关注,一键三连~~点赞+评论+收藏🤞🤞🤞,感谢您的支持~~
以上是关于社死现场の老板来了小伙,搞C语言嵌入式开发这么久了,还不知道u8u16u32s8s16s32是什么意思啊?的主要内容,如果未能解决你的问题,请参考以下文章