|
前述2 D5 t+ D3 r1 n 1bit = 1个位 = 一个0/1 1字节 = 8 bit/ J2 M" J' E& e% D( I C/C++中 U% C9 n5 O; ]' b. i2 S9 u 1.常用的数据类型 字符型 char = 1个字节,范围为:-28~28-1 整型 int = 4个字节,范围为:-2(32-1)~2(32-1)-1& T' l+ B/ G _" E 单精度浮点数 float = 4个字节,范围为:-2128~ +2128-15 ~$ ~6 `, j1 X4 R/ Q 双精度浮点数 double = 8个字节,范围为:-21024~ +21024-1 : p4 h6 Z. w3 q/ s
int8_t : typedef signed char;% S0 _- R: x4 f# [8 M6 _ uint8_t : typedef unsigned char;! M( s/ K+ L2 O* O4 a8 u. ~ int16_t : typedef signed short ;: [& Q0 @$ n) [. B" ] uint16_t : typedef unsigned short ; int32_t : typedef signed int;1 a7 b1 K: a! f+ f5 A6 i uint32_t :typedef unsigned int;* X" }* O% S. Z3 `1 [0 G2 n" B( z int64_t : typedef signed long uint64_t : typedef unsigned long1 i# t: P, H' {7 | 2.嵌入式编程中的无符号类型. ~/ ?' h/ }8 I4 |4 j, c. g unsigned char = uint8_t = u8* \" k% s9 c8 N+ ~) A) M# u unsigned short = uint16_t = u16 unsigned int = uint32_t = u32 因为嵌入式编程中常用十六进制数作为数据类型(0x),所以上述常用的无符号数据类型可以不需要准确计算取值范围,可以直接理解为u多少就是多少bit & s" |7 a. `, i2 f+ w# G 例1:5 I2 u6 r( L# ~
例2:USART中的 USART_DR寄存器(USART数据寄存器) $ |( E* ^) K5 n; z D! }
% O+ v) z9 h4 D d; B L) N 由手册可以看出这是一个可以储存八位数据的寄存器,那么如果想储存其中的数据可以通过以下方式- R/ f+ W0 _1 m9 Y2 c
这样Res中就保存了USART_DR中的八位数据 数据类型自动转换# i( J, @' E2 W* n7 [5 E
; D( n3 F3 U( ]( L9 z ~/ Q0 |- k 最近由于开发平台转化至gd32,突然出现了char类型取值范围问题 按照我对c语言的认知,类似于char, int,long之类的变量应该默认是有符号的变量,但是我出现了下图的问题
# \/ Z: o& O7 _5 r, ^; e 这样print的结果如下所示 " v1 N, E; x' `/ a' t, }# {
可以看到,虽然我虽然定义了char类型变量,但是却输出了unsigned char的最大值,并且keil报了一个warning也提示了char是一个无符号的变量。 更改为signed char类型之后 0 k, }) h0 m5 C& h5 v7 R
# f P$ L1 Z7 H, P 可以看到这样的定义才是一个有符号的变量。我尝试了int类型,却默认是有符号的。! B) }7 A- a+ K8 J ( ]; |0 a3 T" D+ G% [: S+ {+ \ 总结 S7 N" r# G4 V- w 目前判断可能是keil编译的原因,导致char被编译为unsigned char类型,同学们在编程时需要注意一下。 目前手边没有stm32的板子,有兴趣的同学可以尝试一下。 ———————————————— 版权声明:一个旅者 如有侵权请联系删除; G0 e4 |- @, A& Q 5 ^' \% y# S5 ], ? |
《STM32CubeMX2 实战课程》学习笔记5+CubeMX2生成的Uart初始化代码中没有使能
《STM32CubeMX2 实战课程》学习笔记4+FreeRTOS中的SysTick错误及改正
使用stm32C542做的低功耗密码锁示例
《STM32CubeMX2 实战课程》学习笔记1+由MX2生成MDK5项目并打开
《STM32CubeMX2 实战课程》学习笔记3.+sleep/stop/standby低功耗模式的入口
《STM32CubeMX2 实战课程》学习笔记2+MX2生成的MDK5工程中添加已存在文件(*.c / *.h)
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
基于STM32在线升级OTA经验分享
【STM32C0测评】Nucleo-C092开发板驱动DS1302实验
Keil下的STM32N6之RAM运行工程配置说明
微信公众号
手机版