第一章:数据和C
本章将详细介绍两大数据类型:整数类型和浮点数类型。讲解这些数据类型是什么,如何去声明、使用,还会讲到常量和变量的区别。
错误:在输入程序时打错(比如少输入一个;或者是中文的;),那么运行的时候就会报错,不能进行 编译
警告:在我们输入正确无误的时候,编译器也会发生警告(比如:从double类型转化成float类型可能会数据丢失)。尽管会有警告,但是程序仍然可以编译,不会终止
代码如下(示例):
int num;
int i = 10 * num;
里面num是一个变量,它的值会随着程序往下面运行而发生改变
10则是一个常量,它是一个定值,不会随着程序运行而发生改变
一个字节等于八个比特位(也就是二进制位)
char | 占一个字节 |
---|---|
short | 占的字节小于int就行,一般默认为占两个字节 |
int | 一般占4个字节 |
long | 占的字节大于int就行 |
long long | 占八个字节 |
float | 占四个字节 |
double | 占八个字节 |
signed | 表示有符号数,即正数、0、负数 |
unsigned | 表示无符号数,即0和正数,不表示负数 |
void | 表示“空” ,放在返回值位置表示函数执行完不返回任何值 |
void用法:
void swap(int a,int b)
{
int c = a;
a = b;
b = c;
}
该函数只是交换a和b的值,不需要返回值
为了方便大家能够更好的学习,这里就讲讲二进制、八进制、十进制以及十六进制的转换(进制转换原理都是相通的)
二进制 | 逢二进一 |
---|---|
八进制 | 逢八进一 |
十进制 | 逢十进一 |
十六进制 | 逢十六进一 |
二进制:由两个数字组成,0和1
八进制:由八个数字组成,0,1,2,3,4,5,6,7
十进制:由十个数字组成,0,1,2,3,4,5,6,7,8,9(现实生活中用的最多)
十六进制:由八个数字组成,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(也可以是a,b,c,d,e,f)
注:十六进制的abcdef(ABCDEF)分别代表数字10,11,12,13,14,15
所有的进制同理
注意!注意!!注意!!!·:C语言程序里面求次方不能直接使用平方(^)符号,要引用pow函数,我们后面章节讲函数时会讲到pow函数,下面使用平方符号是为了便于讲解进制间的转换
先介绍最简单的二进制转换成十进制:
随便一个二进制数:101110
所有二进制数转化成十进制数都是按照上面步骤来的
二进制转八进制:三位二进制数为一组,小数点的最左边和最右边不够三位数可以补0
为什么是三位二进制数为一组呢? 因为三位二进制数最大值是111,转化之后表示数字7,刚好是一位八进制数最大值(比如:二进制数 1 101 111转换成的八进制位是157,下面会仔细解释),所以用3位二进制数为一组
二进制数:1101111
二进制转化十六进制与转化成八进制原理相同,只不过由八进制三位数一组变成了十六进制四位数一组,大家可以动手试试十六进制以及含有小数的二进制转换,看看答案是否与你心中所想的一样
当我们知道二进制与其他进制的转换时,其他进制间的相互转化也很简单,比如:八进制转化成十进制,如同二进制步骤一样。八进制数1507:7乘以8的0次方+0乘以8的1次方+5乘以8的2次方+1乘以8的3次方=839
进制间的转换要大家多动手才行,看不一定能够看的明白
整数:不含小数点或者没有小数部分的数
浮点数:有小数点的数就是浮点数,浮点数有很多种写法,这里介绍一种e计数法
大家都知道了浮点数的含义,比如3.14,2.0,532.666等都是浮点数然而除了这种写法还有其他的方法表示浮点数。
e计数法:532.666还可以写成5.32666E2或者5.32666e2,这里面E和e都是同样的效果,意义是10的次方,后面的数字2就是表示前面E或者e的多少次方,也就是说2是E或者e的指数
同理,2.0可以写成0.2E1或者0.2e1
前面我们讲过有关int类型的知识,现在我们来深入研究一下
int表示整型类型,在打印输出的时候要用到%d,%d作用就是打印出有符号十进制整型结果(有符号下面再详细介绍)
//int的声明作用
int num//这里的num就被int声明成为了一个整型变量
//num可以被赋值为11,22,但是不能被赋值为11.0,12.0,这样会报错
int num,sum;//这是同时声明两个整数变量,中间要逗号隔开
int num=10//这里就是一个初始化过程,把num这个整数变量初始化为整数10
int num,sum=10//这里只把后面的sum初始化为10,前面num没有被初始化,默认为0
unsigned int 和signed int分别表示无符号整型和有符号整型,signed和unsigned可以加在所有数据类型前面,都是一样的原理,signed一般可以省略不写。使用unsigned就表示该数据类型不能改变为负数,只有0和正数。
short int 表示短整型,储存空间较小,常用于较小值的场所,方便节约空间
long int 表示长整型,储存空间较大,常用于较大值的场所
long long int 表示长长整型,储存空间更大,常用于更大值的场所
这些类型声明同理,输入数据类型后,输入变量名称,然后进行赋值。每种int类型有它不同的用途,都有存在的意义,比如:unsigned常用于计数,因为计数没有负数。
这里不同类型打印的方法不同:
unsigned int | %u |
---|---|
long int | %ld |
long long int | %lld |
同理
%lx | 打印long类型的十六进制格式整数 |
---|---|
%llx | 打印long long类型十六进制格式 整数 |
%lo | 打印long类型的八进制格式 整数 |
%llo | 打印long long类型的八进制格式 整数 |
char是字符类型,上章讲了char和转义序列的重点内容,接下来进行补充说明
char+变量名+=+字母、数字,标点符号
char num = 'a'
这样就把num初始化成为了字符a
但是当打印的时候,如果用%d打印的话打印出的值是97,因为字符a在ASCLL表里面十进制对应的是97
另外,char在某些编译器可以用来处理小整数,前面可以加unsigned或者signed,但如果用char处理字符,则什么都不用加
这两个类型统称为浮点数类型,简称浮点型
浮点型的声明,初始化与上文的char和int类型一样,不过多了小数点罢了
上文介绍了e计数法,如果采用e计数法,那么就不能用%f和%lf来打印float和double类型了
float | %f |
---|---|
double | %lf |
long float | % |
当double qwer = 3.14e19的时候
printf()打印时要用到%e,打印出的结果是3.14e+19,意思是3.14这个数小数点向右移动了19位
当一个float型的变量num要与一个int型变量sum计算时怎么办呢?
我们可以这样做,在num前面加上(int),也就是变成了(int)num,这样num就被强制转换成为了整型。sum前面加上(float)变成了(float)sum,也就是把sum强制转换成为了浮点型,这样就可以将num和sum进行运算了