• Arduino基本数据类型


    基本数据类型简介

    常见的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
  • 相关阅读:
    为什么要持续输出
    从Libra看区块链的机遇
    windows 通过choco 安装 .net core windowshosting
    java 正则表达式空格无法匹配
    docker jenkins 安装
    docker jenkins 前端node项目 自动化部署异常 env: ‘node’: No such file or directory
    jenkin docker node 自动化部署配置
    centos docker redis 安装
    Windows server 2012 出现大量无名已断开连接用户清楚办法
    spring boot 打包jar后访问classes文件夹的文件提示地址不存在
  • 原文地址:https://www.cnblogs.com/lulipro/p/7672954.html
Copyright © 2020-2023  润新知