
前述 1bit = 1个位 = 一个0/1% K! [, h6 I! c5 J \( N 1字节 = 8 bit; R3 i& {$ G( p0 H j# `4 k C/C++中- e+ U# z( |# u9 G! |* K 1.常用的数据类型3 e+ Q) d: W4 m2 A& _, G' M/ O 字符型 char = 1个字节,范围为:-28~28-1* s! Z% x$ X1 D+ e: D 整型 int = 4个字节,范围为:-2(32-1)~2(32-1)-1* U% H: {7 D6 h/ g: K( n F 单精度浮点数 float = 4个字节,范围为:-2128~ +2128-1 双精度浮点数 double = 8个字节,范围为:-21024~ +21024-18 k9 U+ E, {, M( H2 u: e ![]() int8_t : typedef signed char;6 v) Z0 S" o& N, a. l+ V uint8_t : typedef unsigned char;* `. [* E' b3 Q, l" r" S int16_t : typedef signed short ; uint16_t : typedef unsigned short ;2 }* O$ \" X' A U. y( S8 e int32_t : typedef signed int;, m" y7 N+ O& I. [2 q uint32_t :typedef unsigned int; int64_t : typedef signed long uint64_t : typedef unsigned long) Z5 R$ s' L7 F; J& |. J 0 w9 u5 J6 P, H' e) b 2.嵌入式编程中的无符号类型 unsigned char = uint8_t = u8 unsigned short = uint16_t = u16 unsigned int = uint32_t = u322 a2 b+ z5 H+ @- ]' e$ n8 t 因为嵌入式编程中常用十六进制数作为数据类型(0x),所以上述常用的无符号数据类型可以不需要准确计算取值范围,可以直接理解为u多少就是多少bit 例1:
例2:USART中的 USART_DR寄存器(USART数据寄存器)- O. b# |. p/ I5 O! E ![]() - ~8 R0 [/ O3 F5 C# `+ h+ b$ m. m 由手册可以看出这是一个可以储存八位数据的寄存器,那么如果想储存其中的数据可以通过以下方式
这样Res中就保存了USART_DR中的八位数据' C( q# [" A( F$ }" `4 X$ O3 t 数据类型自动转换 7 J/ d1 s% Y* L. T; a7 P6 H ![]() 1 s- M% Q6 F3 S# Q5 q$ j, _/ u 最近由于开发平台转化至gd32,突然出现了char类型取值范围问题 按照我对c语言的认知,类似于char, int,long之类的变量应该默认是有符号的变量,但是我出现了下图的问题 ! e) j% t& ~; i; c ![]() 这样print的结果如下所示7 x @% x0 ^( x! Z; O ![]() ( L2 A6 P- `) N) d 可以看到,虽然我虽然定义了char类型变量,但是却输出了unsigned char的最大值,并且keil报了一个warning也提示了char是一个无符号的变量。) K$ B8 n' s0 A- D9 J: Y0 u1 H 更改为signed char类型之后! W1 G+ K; \# O) L3 E- c ; P6 w1 @ N- }2 T$ S: d( v ![]() 9 X' w+ P, Z' c 可以看到这样的定义才是一个有符号的变量。我尝试了int类型,却默认是有符号的。 总结 目前判断可能是keil编译的原因,导致char被编译为unsigned char类型,同学们在编程时需要注意一下。& D( b0 a0 h- Q- O7 b 目前手边没有stm32的板子,有兴趣的同学可以尝试一下。9 ^ o6 h" O9 r ———————————————— 版权声明:一个旅者" x# R/ g9 A( U* z" v 如有侵权请联系删除 |
Keil下的STM32N6之RAM运行工程配置说明
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
兔哥的初代M33【002】-H503Nucleo 内部flash操作
兔哥的杂谈【002】——如何性价比更高地去编译STM32
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
FreeRTOS学习笔记2
【NUCLEO-H533RE评测】+05 调试PWM
基于STM32在线升级OTA经验分享
基于STM32 hardfault问题分析经验分享
【NUCLEO-C0评测】硬件OLED显示