1 基本数据类型:不可以再分解成其他类型了,是自我说明的
2 构造数据类型:一个构造类型的值可以分解成若干个成员或者元素,每个成员都是一个基本数据类型或者又是一个构造类型
例如:数组类型、结构体类型、共用体(联合体)类型
3指针类型:他的值是用来表示某个变量在存储器中的地址
4 空类型:再调用函数时,通常向调用者返回一个函数值,这个函数值具有一定的数据类型,应在函数定义及函数说明中给以说明,例如在前序中,写的int max(int a,int b);int类型就说明这个函数的返回值是整型量,其中特殊的是void,我们后续会介绍这个用法
我们基于基本数据类型,按照取值是否可改变又分为常量和变量两种
在程序执行过程中,值不发生改变的量成为常量,值可变的量称为变量
常量是可以不经过说明直接引用的,变量则必须先定义,后使用
符号常量:用标识符代表一个常量,符号常量比较特殊,他虽然是个常量,但是他需要先定义
符号常量在使用之前必须先定义,一般形式为:#define? ? ?(预处理指令)
那我们进一步思考一下,为什么要进行宏定义,如果我们从程序员角度来说的话,我们根据宏定义可以很快地明白这个程序写的什么意思,方便程序员理解这个代码,同时还可以做到一改全改,我们只需要修改PRICE后面的数值就可以了
综上得,1含义清楚,2能做到一改全改
变量定义必须放在变量使用之前,一般放在函数体得开头,要区分变量名和变量值是两个不同的概念
整形常量有八进制、十六进制和十进制三种
在程序中是根据前缀去区分的
补充:
内存中的二进制存储(一个字节byte=8位bit)
数值是以补码表示的;
正数的补码和原码相同;
负数的补码:将该数的绝对值 的二进制形式按位取反再加1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?例如:求-10的补码
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 10的原码:0000 1010
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?取反:? ? ? ? 1111 0101
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?再加1,得到-10的补码:11110110
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第一位是符号位,如果是0就代表是正数,是1代表是负数
整形变量的分类(这里跟占多少个字节跟系统和编译器规定有关)
1? 基本型:类型说明符为int,在内存中占4个字节
2? 短整型:类型说明符为short int或者short,所占字节的取值范围均与基本型相同
3? 长整型:类型说明为long int或者long,在内存中占四个字节
4? 无符号型:类型说明为unsigned
代码1:
代码2:
我们知道short所表示的数很小,是有范围的,32767是0111? 1111? 1111,如果加1的话就成了1000? 0000? 0000是-32768
代码3:
这个例子想要说明的是不同类型的量可以参与运算并且相互赋值,其中类型转换是由编译系统自动完成,有关类型转换的规则将在以后介绍
实型也称浮点型,只采用十进制(小数,指数)
实型变量分为:单精度(float),双精度(double)和长双精度(long double)
float也是有一定的承受限度,所以数不可以太大
补充:
1.0/3*3等于多少?
3/2呢?
1/3*3呢?
字符型包括字符常量和字符变量(char%c)
例如:‘a’,’b‘,’=‘,’+‘都是合法的字符常量
只能有单引号括起来;
只能是单个字符;
’5‘ 和 5 是不同的,’5‘是字符常量,不能参与运算
小写字母换成大写字母
1? 字符常量由单引号括起来,字符串常量由双引号括起来
2? 字符常量只能是单个字符,字符串常量则可以含一个或者多个字符
3? 可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量
例如:char a=’a‘,但是不可以char? a=”a“;
一共分为两种方法,一种是自动转换,另一种是强制转换
1? 要转换为同一个类型,例如外交官去翻译别国的语言
2? 转换按数据长度增加的方向进行,以保证精度不降低,例如int和long型,要将int转换成long型再进行运算
3? 所有浮点型运算都是以双精度进行,即使只含有float单精度运算的表达式,也要转换为double型
4? char和short参与的时候,要转换成int
5???在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分将四舍五入向前舍入
PI是实型,r和PI转换为double型,结果也是double型,由于s是整型,那么结果就是整型,所带来的代价就是丢失精度
一般形式为:
(类型说明符)(表达式)
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型
例如:
(float)a? ? ?强制把a转换成实型
(int)(x+y)? 把x+y的结果转化为整型
特别强调一点,这里面的强行转换只会保留整数,而不是四舍五入