Arduino数据类型
Arduino -数据类型-系列1
数据类型在C语言中是一个很广泛的体系,它用于声明不同类型的变量或函数。变量的类型决定了它在存储中占用多少空间以及如何存储。下面列出了我们在Arduino编程过程中会使用到的所有数据类型。
void
例子:
void只在函数声明中使用。它表明,函数不会向调用它的函数返回任何信息。
Boolean
例子:
布尔类型的变量包含了两个值中,true 或 false。每个布尔变量占用一个字节的内存。
Char
例子:
char类似于字符串,这种变量的大小通常为1个字节。书写时,单字符用单引号,比如:’A’;多个字符,使用双引号:”ABC”。当字符以数字形式存储时,需要遵循ASCII码表中的特定编码,这意味着可以使用字符对应的 ASCII 码进行算术运算。比如:’A’ + 1的值是66,因为大写字母A的ASCII 码是65。 范围是-128 ~127 。
unsigned char
例子:
无符号字节型是一种无符号数据类型,占用一个字节的内存。无符号字节类型的取值范围是 0 到 255。
byte
byte 存储一个8位无符号数字,范围从0到255。如:
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)。如:
Unsigned int
无符号整型数在存储方式上与 int 相同,它不存储负值只存储正值,范围是:0 到65,535 (2^16)- 1。对于Arduino Due 它的存储范围从 0 到4,294,967,295 (2^32 – 1)。
Word
在Uno和其他基于ATMEGA的开发板上,一个 word 存储一个16位无符号数字。而在 Due 和 Zero 开发板上,word 存储一个32位无符号数字。
Long
long 长整型常量末尾要用L标识出来,它字节数是4,存储位数32位,范围:从 -2,147,483,648 到 2,147,483,647。
unsigned long
无符号long变量是用于数字存储和存储32位(4字节)的扩展大小变量。与long不同,无符号long变量不存储负数,其范围从 0 到 4,294,967,295(2^32 – 1)。
short
short是16位数据类型。在所有arduino(基于ATMega和ARM)的开发板上,一个short存储一个16位(2字节)的值。这将产生-32,768到32,767的范围(最小值为-2^15,最大值为(2^15)- 1)。
float
浮点数的数据类型是具有小数点的数字。浮点数通常用于近似模拟值和连续值,因为它们比整数具有更高的分辨率。浮点数可以大到3.4028235E+38,也可以小到-3.4028235E+38。它们被存储为32位(4字节)的信息。
double
在Uno和其他基于ATMEGA的开发板上,double 占用4个字节。也就是说,double 与 float 完全相同,在精度上没有任何提高。在Arduino Due上,double有8 字节(64bit)的精度。
Arduino -数据类型-系列2
类型
|
字节数
|
范围
|
说明
|
char
signed char
unsigned char
|
1
|
-128 ~127
-128 ~127
0~255
|
Arduino中的char是有符号的,等价于signed char。范围是-128 ~127 。
char目的是用于储存ASCII字符。如果你想存储字节数据,建议使用byte来明确代码目的。
|
byte
|
1
|
0~255
|
byte不是C/C++标准类型,他是Arduino平台下特有的,实际就是无符号8位整型。
Arduino.h中,有这样的类型定义: typedef uint8_t byte;
|
int
unsigned int
|
2
|
-32768-32767
(2字节有符号)
0~65535
(2字节无符号)
|
在基于ATMega的8位单片机中,如Arduino UNO,Ardunio Mega2560,int是2字节的.
而在有些高级Arduino板,如Arduino Due,SAMD等中,int占4字节。
|
long
unsigned long
|
4
|
-2147483648 ~ 2147483647
0 ~ 4294967295
|
长整型常量末尾要用L标识出来。
如:long num = 29596725L;
|
float
|
4
|
-3.4028235E+38 to 3.4028235E+38
|
\
|
double
|
4
|
-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高。
|
bool
|
1
|
true 、 false
|
实质就是C++中的bool类型,你也可以使用boolean,因为在Arduino.h中,有这样的类型定义:
typedef bool boolean;
|
二进制常量
#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 #define B11111111 255 #endif
包含类型大小信息的整数类型
/*********************整数类型************************/ 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