Loading... ### 基本数据类型简介 常见的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来明确代码目的。 | | 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; | ### 二进制常量 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 #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 ``` Last modification:August 21, 2021 © Allow specification reprint Support Appreciate the author WeChat Like 0 如果觉得我的文章对你有用,请帮忙点一下上面的广告