原创 C语言与单片机-5-数据类型1

2015-10-20 08:40 2713 12 12 分类: MCU/ 嵌入式 文集: C语言

  程序的输入和输出都是数据。所以学习语言必须先了解数据类型。数据类型规定了数据占用内存大小和存储形式。举例:

          char X;

         int  Y;

    我们声明了X、Y两个数据类型,都可以存储数据。不同的是X是8bit   存储空间,Y是16位(或者32位)存储空间。

        X X X X,X X X X           X的最大值是0X7F,最小值是-128。因为负数是以补码方式存储。所

以- 128在内存中存储形式是1000 0000。想想为什么?

   Y 的取值范围是   -2^15 ~ 2^15-1。

     如果我们计算两个数字相加15,120,以下代码可以实现。

      char   x=15;

      char y=120;

      char z=x+y;

      y以下代码页可以实现

      int    x=15;

      int   y=120;

      int   z=x+y;

          区别在哪里?

     我们不妨看看keil编译器生成汇编语言。首先第一段代码汇编:

   C:0x000F    740F     MOV      A,#0x0F             ;将0x0f(15)存入A寄存器
   C:0x0011    2478     ADD      A,#0x78             ;A寄存器值加0x78(120)
   C:0x0013    F508     MOV      0x08,A               ;将寄存器A的值存入8号地址空间

        一共三条机器码即可实现。

   我们再看看第二代码汇编语言:

          C:0x0003    740F     MOV      A,#0x0F  ;将0x0f(15)存入A寄存器
          C:0x0005    2478     ADD      A,#0x78  ; A寄存器值加0x78(120)
          C:0x0007    F509     MOV      0x09,A    ;将寄存器A的值存入9号地址空间
          C:0x0009    E4       CLR      A               ;清除累加器
         C:0x000A    33       RLC      A                 ;累加器带进位左移
         C:0x000B    F508     MOV      0x08,A     ;将寄存器A的值存入8号地址空间

     一共六条及其指令。因为所有变量时整型数据,所以必须考虑到进位问题。并且将进位存储到地址9中。相加的结果存储在8号地址中。进位存储在9号地中。

 

地址序号 数据
0x08 135
0x09 0

       由此可以得出C语言中,整型数据低位在前,高位在后。

       两段代码,虽然我们得到了基本结果,但是在计算机中计算过程是有区别的。完成同样的计算int型数据要比char型数据效率低。

         这样就我们为什么规定不同的数据类型,主要从计算机计算需要的空间和时间考虑。所以在编写代码前一定要考虑清楚数据类型。能使用小范围数的时候一定使用小的数据类型,比如如果您要统计每个人的年龄,char型数据就可以啦,毕竟能活过127岁的人不多!

         通过以上介绍,相信您对数据类型有了一定的了解!

 

 

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /2 下一条