程序的输入和输出都是数据。所以学习语言必须先了解数据类型。数据类型规定了数据占用内存大小和存储形式。举例:
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条评论)
登录后参与讨论