|
前述( C6 O k4 Z# w. x& b 1bit = 1个位 = 一个0/1 1字节 = 8 bit8 n( u$ X; m3 B" B S1 V* j C/C++中" O! Y3 B: J" `- M 1.常用的数据类型 字符型 char = 1个字节,范围为:-28~28-1 整型 int = 4个字节,范围为:-2(32-1)~2(32-1)-1: e+ Y+ K- p# c4 e 单精度浮点数 float = 4个字节,范围为:-2128~ +2128-1 双精度浮点数 double = 8个字节,范围为:-21024~ +21024-13 F. H# K9 ]" K. D7 O" M: o1 v1 K
int8_t : typedef signed char; uint8_t : typedef unsigned char; int16_t : typedef signed short ;* a3 @5 f$ i, W1 ?; F uint16_t : typedef unsigned short ;( \' y% w$ n( Y* _' P: w0 E* w int32_t : typedef signed int;0 Y* U3 f9 I6 v" K4 U/ q# t! o uint32_t :typedef unsigned int; int64_t : typedef signed long uint64_t : typedef unsigned long. c2 u& m# g/ x) A* W" |& H, O" F* B( _ - h, K% O( x' [ 2.嵌入式编程中的无符号类型. K1 {* ?0 X9 x* ]+ w( m unsigned char = uint8_t = u8 unsigned short = uint16_t = u16% ~# @3 S- T5 _8 z1 l unsigned int = uint32_t = u327 C/ t O7 Q! p7 d% K1 Z 因为嵌入式编程中常用十六进制数作为数据类型(0x),所以上述常用的无符号数据类型可以不需要准确计算取值范围,可以直接理解为u多少就是多少bit$ B0 a) ?. v U 例1:$ L$ \. Q8 ~$ e1 V! i% n
例2:USART中的 USART_DR寄存器(USART数据寄存器) ( T0 M) s8 f% r5 f
n" U- _) G( |- U( z7 Z( N% J 由手册可以看出这是一个可以储存八位数据的寄存器,那么如果想储存其中的数据可以通过以下方式8 X/ g+ @0 n/ _
这样Res中就保存了USART_DR中的八位数据; j: w0 `& `3 z" {6 ~! s' p. [ 数据类型自动转换
, Q( Z" r/ I' Z' K* _' ^8 [ * l- N. g# d/ Y: O/ N 最近由于开发平台转化至gd32,突然出现了char类型取值范围问题 按照我对c语言的认知,类似于char, int,long之类的变量应该默认是有符号的变量,但是我出现了下图的问题 6 d. @6 w- @+ n! p* `) r$ k
' |* E; x8 @* B5 d- @- }7 I% E) L 这样print的结果如下所示& Z# ]/ o% }/ \$ o, B4 ^0 O* I$ g
可以看到,虽然我虽然定义了char类型变量,但是却输出了unsigned char的最大值,并且keil报了一个warning也提示了char是一个无符号的变量。 更改为signed char类型之后
可以看到这样的定义才是一个有符号的变量。我尝试了int类型,却默认是有符号的。+ H. L2 V( a7 a1 B# g " A9 L+ G) ]* n9 c7 C 总结 目前判断可能是keil编译的原因,导致char被编译为unsigned char类型,同学们在编程时需要注意一下。- f. C2 ^" B' W* {1 {& P 目前手边没有stm32的板子,有兴趣的同学可以尝试一下。 ———————————————— 版权声明:一个旅者8 V% G# k% X% v 如有侵权请联系删除" E: Y% [4 K0 n: i! v. Q 8 R' S6 ~. {) a' ]2 \ h6 j9 B' L& T8 O% W0 E) \+ y% U |
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
基于STM32在线升级OTA经验分享
【STM32C0测评】Nucleo-C092开发板驱动DS1302实验
Keil下的STM32N6之RAM运行工程配置说明
兔哥的初代M33【002】-H503Nucleo 内部flash操作
兔哥的杂谈【002】——如何性价比更高地去编译STM32
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
FreeRTOS学习笔记2
【NUCLEO-H533RE评测】+05 调试PWM
基于STM32 hardfault问题分析经验分享
微信公众号
手机版