数据类型

来源:互联网 发布:淘宝网男鞋休闲鞋2016 编辑:程序博客网 时间:2024/06/10 02:53

    在说数据类型之前先说两样,内存和变量。

    先说下内存,说内存呢 也不先说内存,先说一下计算机内部,计算机内部呢  有存储 硬盘 等数据存储介质,里面存的是就是数据,数据是以一位一位的高低电平组成的。而8位数据组成一个字节。我们假设 计算机里有一堆盒子,有的里面是高电平,有点是低电平,也就是数字 1  和  0,举个例子 计算机里面存一个  0101 0101  换算成数字就是85,

             1KB    =    1024字节

             1MB    =    1048  576字节

             1GB    =    1073  741  841字节

             1TB     =    1099  511  627  776字节

   

    变量是什么呢   其实是PC或者其他设备指定的一块特殊内存。根据不同的变量分配不同大小的内存。

    举个例子

            char  date;           分配了一个字节 也就是8位

            int      temp;          分配了两个字节 也就是16位

            float   num;           分配了四个字节 也就是32位

    变量定义的方式是    类型  +  变量名    比如    char  date        char  就是定义类型    date  就是变量名 


    数据类型主要是一下几类

    整型:

    关键字                                                                                                            占用字节数

    char                     (有符号)        unsigned  char                        (无符号)           1

    short  int              (有符号)        unsigned  short  int                (无符号)            2

    int                         (有符号)        unsigned  int                           (无符号)            4

    long  int               (有符号)        unsigned  long  int                 (无符号)            4

    long  long  int     (有符号)        unsigned  long  long  int       (无符号)            8

    浮点数:

    关键字                                                           占用字节数

    float                                                                         4

    double                                                                    8

    long double                                                          12

 

    关于以上的变量定义,字节什么的  用以下代码说明。

    在此之前  先介绍一个函数  叫  sizeof  这是专门测量长度的。用法很简单  就是sizeof(要测量的数据)


#include <stdio.h>int main(void){    printf("char的长度是%d\n", sizeof(char));    printf("short int的长度是%d\n", sizeof(short int));    printf("int的长度是%d\n", sizeof(int));    printf("long int的长度是%d\n", sizeof(long int));    printf("long long int的长度是%d\n", sizeof(long long int));    printf("float的长度是%d\n", sizeof(float));    printf("double的长度是%d\n", sizeof(double));    printf("long double的长度是%d\n", sizeof(long double));    return 0;}

    执行效果:


    由此我们能看到了不同类型所占用的字节数,要根据需求选择我们需要的类型,小心浪费。PC还好说对于 mcu来说FLASH就是钱啊,一定要注意啊。

#include <stdio.h>char          date1 = 123;         //定义变量并赋值int           date2;               //单纯定义变量long int      date3 = 123456789;long long int date4;float         date5 = 1.23;double         date6;int main(void){    printf("date1数值内容为%d\n", date1);    date2 = 12345;                 //变量赋值    printf("date2数值内容为%d\n", date2);         printf("date3数值内容为%ld\n", date3);    date4 = 1234567890123;    printf("date4数值内容为%lld\n", date4);        printf("date5数值内容为%f\n", date5);    date6 = 1.23456;    printf("date6数值内容为%lf\n", date6);    return 0;}




顺便说几个  关键词  #define      typedef

#define  是一种宏定义  常用的方式就是用一个东西替换另外一个东西。

如  #define    PI    3.14     就是用PI代替3.14  以后代码出现的PI 均可代替3.14 如果需要修改的话,只需要修改这么一处就可以了

这种应该算是简单替换     除了可以代替常量  还可以代替  字符  关键字等   

如   #define  uchar unsigned char                       

另外  #define   除了可以代替  常量之外  还可以用作   函数

如      #define max(x,y) (x)>(y)?(x):(y);   

说道#define 就要说下配套的 #undef  用于取消宏 

    #define    PI   3.14      定义宏 

    #undef     PI                 取消宏


和#define  类似的的 有个typedef   它有些用法 和 define 类似 ,原理却不一样 。

#define  只是预处理  单纯的 进行替换 ,没啥讲究也不检查。 #typedef  偏向于类型的  定义。 你可以看到它都没有#号  不属于预处理范围内

举个例子:

           typedef    char    *ptr_char              就是把ptr_char  定义成指向字符的指针。    ptr_char  就等于  char *

                  可以定义  put_char  a;

           typedef    struct     student              定义结构体类型。                          Stu  就等于  struct  student

           {

                     int * name;

char age;

            } Stu

                      可以定义  Stu  raul;


        定义变量可以有很多限定符   (存储类型) auto  static  extern  register                      const

                        在设备中有三个地方可以存储变量  :  普通内存 , 运行时的堆栈  , 硬件寄存器。              

auto  定义的是自动类型  你平时定义变量 不加这种存储类型限定符 默认就是 auto 也就是存在 堆栈中,一般就是 需要这个变量时 这个变量会被建立  完事就被销毁。

                static 定义的是静态类型 一直都存在与静态内存中,还会限定作用域。

extern 外部声明其实东西没多,就是让编译器知道 有这么个东西。其实就是扩大作用域。

register  寄存器类型  就是把变量存在寄存器中,如果是常用的,可以这么做,不过不推荐。


     const  是只读的意思  定义过后  就不改了。



0 0
原创粉丝点击