基本数据类型:不能再分解为其他类型的数据类型。
构造数据类型:数组类型,结构体类型,共用体(联合体)类型
指针类型:指针的值是用来辨识某个变量在内存存储器中的地址
空类型:
(1)基本数据类型:
常量:程序执行过程中值不会发生改变的量称为常量(符号常量就是宏定义,宏定义不能被赋值)
变量:值可以改变的量,一个变量应该有一个名字,在内存中占一定的存储单元,变量的声明要在使用之前
整型常量:八进制以0为前缀,十六进制以OX为前缀
int k = 3;k变量名,3变量的值,ox0010ff变量的地址
一个字节byte = 8bit
原码,反码,补码:
正数的原码,反码,补码是一样的
负数的反码是原码取反(符号位除外)补码是反码加1
例如10的原码是00001010 补码反码都是00001010
-10的原码是10001010 反码是11110101 补码是11110110
第一位是符号位,0是正数,1是负数
整型变量的分类:
sizeof(int) = 4byte = 32bit 取值范围-2的16次方到2的16次方
sizeof(unsigned int) = 4 byte = 32bit 取值范围0到2的32次方
sizeof(short int) = 2byte = 16bite 取值范围-2的8次方到2的8次方
sizeof(unsigned short int ) = 2byte = 16bit 取值范围0到2的16次方
sizeof(long int ) = 8btye = 64bit 取值范围-2的32次方到2的32次方
sizeof(unsigned long)= 8btye = 64bit 取值范围0到2的64次方
sizeof(float) = 4btye = 32bit
sizeof(double) = 8btye = 64bit
字符常量:
用单引号括起来的字符,’a’,’v’,’5’
字符常量的特点:只能用单引号括起来,不能使用双引号;只能是单个字符不能是字符串;可以是字符集中任意字符,但是数字被定义为字符型之后就不能参与数值运算,5和’5’是不同的,’5’是字符常量,不能参与运算
字符变量:char a,b;
转义字符:
字符数据在内存中的存储形式及使用方法:
每个字符变量被分配一个字节的内存空间,
字符串常量是由一对双引号括起的字符序列,字符串常量和字符常量的区别:
(1)字符常量是单引号,字符串常量是双引号
(2)字符常量只能是单个字符,字符串常量则可以包含一个多个字符
(3)可以把字符常量赋值给字符变量,但是不可以把字符串常量赋值给字符变量 (char a = ‘a’(对);char a = “a”(错))
(4)字符常量占一个字节的内存空间,字符串常量占的内存字节数等于字符串中字节数加1,加的1是留给\O,转义字符表示字符串结束
char a = ‘a’(一个字节)
char a = “a”(两个字节)
各类数值类型数据间的混合运算
自动转换,强制转换
自动转化遵循的规则:
(1)保证精度不降低,比如int和long运算的时候,先把int转换成long,再运算
(2)所有的浮点运算都是双精度的,即使含有float单精度也要先转换成double再运算
(3)char和short型参与运算的时候必须先转换成int
char ,short ->int ->unsigned->long->double
void main(){
float P = 3.14159;
int a ,r = 5;
a = r *r*P;(r,和P都转化为double,再转化为int)
printf(%f,a);
}
强制转换
(float)a
无论是强制转换还是自动转换都只是为了本次运算的需要而做的临时性转换,以后再用到改变量时还是转换之前的类型
void main(){
float a = 0.3;
printf(“%f %d %f”,a (int)a,a);
}
算术运算符,算术表达式
+右结合性 -左结合性 *左结合性 / 左结合性
printf(“%d”,3/2);//1
printf(“%f”,3.0 / 2”);//1.5
printf(“%f”,3/2);//错误,整型除以整型得不到浮点型
自增,自减运算符
i++ ,i参与运算后加1
++i 先加1再运算
int i = 5;
y = i++;(y = 5,i = 6) z = ++i(i = 6 ,z = 6)