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