STM32中常用数据类型及取值

前述

1bit = 1个位 = 一个0/1
1字节 = 8 bit
C/C++中
1.常用的数据类型
字符型 char = 1个字节,范围为:-28~28-1
整型 int = 4个字节,范围为:-2(32-1)~2(32-1)-1
单精度浮点数 float = 4个字节,范围为:-2128~ +2128-1
双精度浮点数 double = 8个字节,范围为:-21024~ +21024-1
在这里插入图片描述

  • int8_t : typedef signed char;
  • uint8_t : typedef unsigned char;
  • int16_t : typedef signed short ;
  • uint16_t : typedef unsigned short ;
  • int32_t : typedef signed int;
  • uint32_t :typedef unsigned int;
  • int64_t : typedef signed long
  • uint64_t : typedef unsigned long

2.嵌入式编程中的无符号类型
unsigned char = uint8_t = u8
unsigned short = uint16_t = u16
unsigned int = uint32_t = u32
因为嵌入式编程中常用十六进制数作为数据类型(0x),所以上述常用的无符号数据类型可以不需要准确计算取值范围,可以直接理解为u多少就是多少bit
例1:

u8  a;//8位二进制数据 a最大值0xff 
//可以直接储存一个8位寄存器的内部数据

u16 b;//16位二进制数据 b最大值0xffff
//可以直接储存一个16位寄存器的内部数据

u32 c;//32位二进制数据 c最大值0xffff ffff
//可以直接储存一个32位寄存器的内部数据

例2:USART中的 USART_DR寄存器(USART数据寄存器)
在这里插入图片描述
由手册可以看出这是一个可以储存八位数据的寄存器,那么如果想储存其中的数据可以通过以下方式

u8 Res = 0;
Res =USART_ReceiveData(USART1);	//将寄存器中数据储存到Res中

这样Res中就保存了USART_DR中的八位数据
数据类型自动转换
在这里插入图片描述


-----------------------------------------------2022年6月18日15:38:34更新-----------------------------------------------
最近由于开发平台转化至gd32,突然出现了char类型取值范围问题
按照我对c语言的认知,类似于char, int,long之类的变量应该默认是有符号的变量,但是我出现了下图的问题
在这里插入图片描述

这样print的结果如下所示
在这里插入图片描述
可以看到,虽然我虽然定义了char类型变量,但是却输出了unsigned char的最大值,并且keil报了一个warning也提示了char是一个无符号的变量。
更改为signed char类型之后
在这里插入图片描述
可以看到这样的定义才是一个有符号的变量。我尝试了int类型,却默认是有符号的。

总结

目前判断可能是keil编译的原因,导致char被编译为unsigned char类型,同学们在编程时需要注意一下。
目前手边没有stm32的板子,有兴趣的同学可以尝试一下。


  • 21
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个旅者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值