在编程进程中,不同的CPU,其数据类型的含义各不相同,所以必定要留意相应变量数据类型的界说和转化,否则在核算中可能会呈现不确定的过错。
(一)C言语中的品种数据
整型:int short long
实型:float double
STM32中的数据类型十分的多,常用的变量,文件中的界说如下:
/* exact-width signed integer types */
typedef signed char int8_t;
typedef signed short int int16_t;
typedef signed int int32_t;
typedef signed __int64 int64_t;
/* exact-width unsigned integer types */
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
typedef int32_t s32;
typedef int16_t s16;
typedef int8_t s8;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
还有float int编译器中不能看到其界说(估量已编译了)。
因而在STM32编程中,常用的数据类型有:char(字符型),u8,u16 ,u32,但是在一些核算中,涉及到负数,小数,因而要用到:int float doulbe 型。
其间u8——1个字节,无符号型(不能表达负数,假如用来当作负数的话,就出错了);
u16 ——2个字节,无符号型(参看前边STM32f10x.h中的界说);
u32——4个字节,无符号型;
int——4个字节,有符号型,能够表达负整数;
float ——4个字节,有符号型,能够表达负数/小数;
double——8个字节,有符号弄,能够表达负数/小数;
(二)不同类型数据的混合运算
在C言语中,不同类型的数据间是能够混合运算的。在进行运算时,不同类型的数据要先转化成同一类型,然后进行运算。转化的规矩如下:
留意:箭头的方向只表明数据类型等级的凹凸,由低向高转化,这个转化进程是一步到位的。
(三)数据类型转化规矩
各类数据类型的转化,分为两种方法:隐式(编译软件主动完结),显式(程序强制转化)
隐式转化规矩:
字符必须先转化为整数(C言语规则字符类型数据和整型数据之间能够通用)
short型转化为int型(同归于整型)
float型数据在运算时一概转化为双精度(double)型,以进步运算精度(同归于实型)
赋值时,一概是右部值转化为左部类型
[注]
当整型数据和双精度数据进行运算时,C先将整型数据转化成双精度型数据,再进行运算,成果为双精度类型数据
当字符型数据和实型数据进行运算时,C先将字符型数据转化成实型数据,然后进行核算,成果为实型数据
显式转化规矩:
例:(int)(x+y);
注:强制类型转化时,得到一个所需求的中心变量,本来变量的类型未发生变化。