变量与赋值
变量的存储方式
程序中使用的所有数字必须记录在内存里计算机内存由大量字节构成,每个字节可以单独记录一个数字每个字节有一个编号,不同字节的编号不同。这个编号叫做字节的地址所有字节的地址从0开始向上递增内存中几个相邻的字节可以合并成一个整体用来记录一个数字我们可以把内存中用来记录一个数字的所有字节称为一个存储区一个存储区只能用来记录一种类型的数字存储区也有地址,这个地址就是内部包含的所有字节中地址最小那个字节的地址。
C语言程序中可以使用变量代表存储区,对变量的操作就是对它所代表存储区的
操作程序中所有变量必须先声明然后才能使用,变量声明语句可以用来声明变量量声明语句会让计算机为程序分配一个存储区。
例1:
#include <stdio.h>
int main()
{
int num = 0;
num = 97;
return 0;
}
例1中声明并初始化了一个变量,变量类型是整型,名字为num,值为0。那么这个表达式的意思就是,在内存里面分配一个存储区,由于声明的是整型的数据类型,所以存储区的大小为4个字节,假设这4个字节编号是0xbfc7b1d0~0xbfc7b1d3。然后用变量名num来代表这个存储区,num的地址就是这个存储区的首地址,同时对变量num的操作就是对它代表的存储区做操作。
对num初始化的时候值为0,num存储区的情况如下:
0xbfc7b1d0: 0000 0000
0xbfc7b1d1: 0000 0000
0xbfc7b1d2: 0000 0000
0xbfc7b1d3: 0000 0000
变量有两种使用方法
1.向变量代表的存储区里放一个数字。
2.从变量代表的存储区里获得数字。
赋值语句可以向变量里放一个数字赋值,语句的核心是赋值操作符(=),赋值操作符左边应该写一个代表存储区的内容,这种内存叫左值(变量是最简单的左值)赋值操作符右边应该写一个代表数字的内容赋值语句可以把右边的数字放在左边的存储区里。
例1中num代表了0xbfc7b1d0~0xbfc7b1d3这个存储区,“num = 97;”这语句,就表示对num代表的存储区进行操作,操作后的结果如下:
0xbfc7b1d0: 00000000
0xbfc7b1d1: 00000000
0xbfc7b1d2: 00000000
0xbfc7b1d3: 01100001
变量的数据类型
字符类型(char)
字符类型里包含256个不同的整数,每个整数可以代表一个字符数据(例如'a','^'等),整数和字符仅仅是两种不同的表示方式,ASCII码表中列出所有证书和字符之间的对应关系。
'a' 97
'A' 65
'0' 48
ASCII码表中所有消协英文字母是连续排列的,其中'a'的整数最小,'z'的整数最大,所有大写英文字母和阿拉伯数字字符也都符合这个规律。
'd' - 'a' 等于 'D' - 'A'
'd' - 'a' 等于 '3' - '0' 等于 3 - 0
所有字符数据被分成两组,每组包含128个其中一组字符数据两种表示方式之间的对应关系在所有计算机上都一样,它们的整数范围从0到12另外一组字符数据两种表示方式之间的对应系在不同计算机上不一样,它们的整数范围可能从-128到-1,也可能从128到255。
无符号字符类型(unsignedchar)
它同样包含256个不同的字符数据,这些数据的整数范围在所有计算机上都是从0到255。
短整数类型(short)
它里面包含65536个不同的整数,其中一半是非负数,另外一半是负数。以数字0为中心向两边扩展。
无符号短整数类型(unsigedshort)
它里面也包含65536个不同的整数,从0开始向正数方向递增,不包含负数。
长整数类型(long 或者 long int)
它里面包含2的32次方个不同的整数,其中一半是负数,另外一半是非负数。以0为中心向两边扩展。
无符号长整数类型(nsignedlong或者unsignedlong int)
它里面同样包含2的32次方个不同的整数,从0开始向整数方向扩展,不包含负数。
整数类型(int)
在我们的计算机上整数类型和长整数类型一样。
无符号整数类型(nsignedint)
在我们的计算机上无符号整数类型和无符号长整数类型一样,所有只包含整数的类型他们的数字范围是重叠的,并且逐级扩大在程序中不带小数点的数字后加u表示这个数字是无符号整数类型。
C语言程序中使用浮点类型表示带小数点的数字浮点类型分成单精度浮点类型和双精度浮点类型,双精度浮点类型可以记录更多小数点后面的数位:
单精度浮点型的名称是float
双精度浮点型的名称是double
程序中带小数点的数字计算机默认它的类型是双精度浮点类型,如果在带小数点数字后加f表示这个数字的类型是单精度浮点类型。
复合数据类型
C语言中允许程序员扩展新的数据类型这些新的数据统称为复合数据类型复合数据类型需要先定义然后才可以使用。这里就不深入探究了。
布尔类型
布尔类型是C99规范中引入的新的数据类型,布尔类型中只包含两个整数,一个是真另外一个是假(计算机里采用0代表假,用1代表真)。
任何一个整数都可以当作布尔值使用,0当作布尔值使用时是假,其他所有整数当布尔值使用时都是真。一般在程序中不需要使用这个数据类型,直接
用整数代替就可以。
数据类型和占位符的对应关系
char 和 unsigned char %c
short %hd
unsigned short %hu
long %ld
unsigned long %lu
int %d
unsigned int %u
float %f或%g
double %lf或%lg
%f和%lf会保留小数点后面多余的0
%g和%lg不会保留小数点后面多余的0