Arduino数据类型
Arduino -数据类型-系列1
数据类型在C语⾔中是⼀个很⼴泛的体系,它⽤于声明不同类型的变量或函数。变量的类型决定了它在存储中占⽤多少空间以及如何存储。下⾯列出了我们在Arduino编程过程中会使⽤到的所有数据类型。
void
例⼦:
Void Loop ( ) {
// rest of the code
}
void只在函数声明中使⽤。它表明,函数不会向调⽤它的函数返回任何信息。
Boolean
例⼦:
boolean val = false ; // ⽤布尔类型声明变量,并⽤false初始化它.
boolean state = true ; // ⽤布尔类型声明变量,并⽤true初始化它.
布尔类型的变量包含了两个值中,true 或 false。每个布尔变量占⽤⼀个字节的内存。
Char
例⼦:
Char chr_a = 'a' ;//⽤char类型声明变量,并⽤字符a初始化它.
Char chr_c = 97 ;//⽤char类型声明变量,并⽤字符97初始化它.
char类似于字符串,这种变量的⼤⼩通常为1个字节。书写时,单字符⽤单引号,⽐如:’A’;多个字符,使⽤双引号:”ABC”。当字符以数字形式存储时,需要遵循ASCII码表中的特定编码,这意味着可以使⽤字符对应的 ASCII 码进⾏算术运算。⽐如:’A’ + 1的值是66,因为⼤写字母A的ASCII 码是65。范围是-128 ~127 。
unsigned char
例⼦:
Unsigned Char chr_y = 121 ; // ⽤⽆符号字符类型声明变量
⽆符号字节型是⼀种⽆符号数据类型,占⽤⼀个字节的内存。⽆符号字节类型的取值范围是 0 到 255。
byte
byte 存储⼀个8位⽆符号数字,范围从0到255。如:
byte m = 25 ;//⽤字节类型声明变量,并⽤25初始化它.
int
整形是数字存储的主要数据类型。int 存储⼀个16位(2字节)的值范围是: -32,768到 32,767 (最⼩值为-2^15,最⼤值为(2^15)- 1)。在Arduino中 int 的⼤⼩会因开发板的不同⽽不同。例如,在Arduino Due上,int 存储⼀个32位(4字节)的值,范围是 -2,147,483,648 到
2,147,483,647 (最⼩值为-2^31,最⼤值为(2^31)- 1)。如:
int counter = 32 ;// ⽤int类型声明变量,并⽤32初始化它.
Unsigned int
⽆符号整型数在存储⽅式上与 int 相同,它不存储负值只存储正值,范围是:0 到65,535 (2^16)- 1。对于Arduino Due 它的存储范围从 0 到4,294,967,295 (2^32 – 1)。
Unsigned int counter = 60 ;
Word
在Uno和其他基于ATMEGA的开发板上,⼀个 word 存储⼀个16位⽆符号数字。⽽在 Due 和 Zero 开发板上,word 存储⼀个32位⽆符号数字。
word w = 1000 ;//使⽤类型 word 声明变量,并⽤1000初始化它.
Long
long 长整型常量末尾要⽤L标识出来,它字节数是4,存储位数32位,范围:从 -2,147,483,648 到 2,147,483,647。
Long velocity = 102346 ;//Long型变量的声明,并⽤102346初始化它.
unsigned long
⽆符号long变量是⽤于数字存储和存储32位(4字节)的扩展⼤⼩变量。与long不同,⽆符号long变量不存储负数,其范围从 0 到
4,294,967,295(2^32 – 1)。
Unsigned Long velocity = 101006 ;
short
short是16位数据类型。在所有arduino(基于ATMega和ARM)的开发板上,⼀个short存储⼀个16位(2字节)的值。这将产⽣-32,768到32,767的范围(最⼩值为-2^15,最⼤值为(2^15)- 1)。
short val = 13 ;
float
浮点数的数据类型是具有⼩数点的数字。浮点数通常⽤于近似模拟值和连续值,因为它们⽐整数具有更⾼的分辨率。浮点数可以⼤到
3.4028235E+38,也可以⼩到-3.4028235E+38。它们被存储为32位(4字节)的信息。
float num = 1.352;
double
在Uno和其他基于ATMEGA的开发板上,double 占⽤4个字节。也就是说,double 与 float 完全相同,在精度上没有任何提⾼。在Arduino Due上,double有8 字节(64bit)的精度。
double num = 45.352 ;
Arduino -数据类型-系列2
常见的Arduino是基于ATmega的8位 AVR单⽚机,例如Arduino UNO ,Arduino Nano,Arduino mega2560等。还有⾼级点 32位的,如Arduino Due。
由于Arduino是基于C/C++语⾔的,具有平台差异性,因此,其基本数据类型在这2个平台(8位机和32位机)下有差别。8位机下,int占2字节,double和float⼀样占4字节。⽽32位机下int是4字节,double是8字节。由于32位机很少见,本⽂就只以8位机类型讲解。
类型字节
数
范围说明
char
signed char unsigned char 1
-128 ~127
-128 ~127
0~255
Arduino中的char是有符号的,等价于signed char。范围是-128 ~127 。
char⽬的是⽤于储存ASCII字符。如果你想存储字节数据,建议使⽤byte来明确代码⽬
的。
byte10~255
byte不是C/C++标准类型,他是Arduino平台下特有的,实际就是⽆符号8位整型。
Arduino.h中,有这样的类型定义: typedef uint8_t byte;
int
2-32768-32767
(2字节有符号)
0~65535
在基于ATMega的8位单⽚机中,如Arduino UNO,Ardunio Mega2560,int是2字节的.
unsigned int(2字节⽆符号)⽽在有些⾼级Arduino板,如Arduino Due,SAMD等中,int占4字节。long
unsigned long 4
-2147483648 ~ 2147483647
0 ~ 4294967295
长整型常量末尾要⽤L标识出来。
如:long num = 29596725L;
float4-3.4028235E+38 to
3.4028235E+38 \
double4-3.4028235E+38 to
3.4028235E+38
在基于ATMega的8位单⽚机中,如Arduino UNO,Ardunio Mega2560,double和float没
有差别,都是4字节的.
⽽在Due,等⾼级板中,占8字节。
虽然在8位机的Arduino中float和double是⼀样的,但是在32位平台中,double的精度⽐
float⾼。
bool1true 、 false 实质就是C++中的bool类型,你也可以使⽤boolean,因为在Arduino.h中,有这样的类型定义:
typedef bool boolean;
⼆进制常量
C/C++是不⽀持在代码中直接使⽤⼆进制格式的字⾯值的,但是Arduino.h中包含了⼀个头⽂件 "binary.h" ,如下。其作⽤就是将0~255范围的整数⽤⼀组⼆进制格式的宏表⽰,这样,我们要在程序中显式的使⽤0~255范围内的⼆进制常量,则可以写成以B开头的格式。
#ifndef Binary_h
#define Binary_h
#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
/*.......篇幅原因,省去........*/
#define B11111110 254
float数值范围
#define B11111111 255
#endif
包含类型⼤⼩信息的整数类型
有些做过硬件开发的⼈会使⽤类似于 int8_t 、int16_t 等形式的类型,特点是类型本⾝包含了类型的⼤⼩,让代码更具有移植性。在Arduino 中也可以使⽤。
需要包含头⽂件 #include<inttypes.h >
/*********************整数类型************************/
typedef signed char int8_t; //8bit有符号类型
typedef unsigned char uint8_t; // 8bit⽆符号类型
typedef signed int int16_t; //16bit有符号类型
typedef unsigned int uint16_t;//16bit有符号类型
typedef signed long int int32_t; //328bit有符号类型
typedef unsigned long int uint32_t; //32bit有符号类型
typedef signed long long int int64_t; //32bit有符号类型.可能⽆法使⽤
typedef unsigned long long int uint64_t; //32bit有符号类型,可能⽆法使⽤
/***************保存地址值的类型****************/
typedef int16_t intptr_t; //保存地址值的类型,有符号
typedef uint16_t uintptr_t; //保存地址值的类型,⽆符号
//远地址类型,⽤于单⽚机SRAM⼤于64K(地址编号为0~65535 )的情况,⽤intptr_t可能会溢出。typedef uint32_t uint_farptr_t;
typedef int32_t int_farptr_t;
/***********宏符号常量,保存了各种类型的最⼤,最⼩值**********/
INT8_MAX INT8_MIN
UINT_MAX
INT16_MAX INT16_MIN
UINT16_MAX
INT32_MAX INT32_MIN
UINT32_MAX
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论