在昨天对Linux系统有了一个大体的认知后,今天我们学习了C语言的一些基础知识
1.进制转换
在c语言中,除了十进制,二进制、八进制和十六进制也有其对应应用。
(1)在二进制、八进制、十六进制向十进制转换时,方式是将对应位与对应位的权值相乘。
举例如下。
二进制 1001 1110向十进制转换:1*2^7+1*2^4+1*2^3+1*2^2+1*2^1=158
八进制17向十进制转换:1*8+7=15
十六进制1af向十进制转换:1*16^2+11*16+15=431
(2)十进制向二进制、八进制、十六进制转换时,方法是将十进制数除以进制数得到的余数逆序排列
(3)二进制、八进制、十六进制相互转换时,八进制一位对应二进制三位,十六进制一位对应二进制四位,十六进制一位对应八进制两位。
(4)当一个负的十进制转换为八进制或十六进制时,由于八进制和十六进制不采用负数,因此这种数值转换拥有独特的方式。
首先,将这个负的十进制数转化为32位二进制数,同时首位取1,作为这个数的原码。
之后,求出对应原码的补码,再将这个32位的二进制补码通过(3)中的方式转换为对应的八进制或十六进制数。
2.程序运行与编译流程
(1)程序如何在C语言中被运行起来?
程序(外存中)
执行(加载到内存中)
程序运行结束(回收内存空间)
(2)gcc编译的流程步骤:
gcc filename.c
1.预处理
处理和#号相关代码
1.头文件展开
#include
2.宏定义替换
#define M 100
3.条件编译
#if #elif #else #endif #ifndef #ifdef
gcc -E filename.c -o filename.i
2.编译
将C语言程序编译成汇编代码
gcc -S filename.c -o filename.s
3.汇编
将汇编代码编译成二进制代码
gcc -c filename.c -o filename.o
4.链接
将多个二进制代码链接成为一个可执行程序
gcc filename.c -o filename
3.基础数据类型
(1)整形数据
整形数据分为三大类:
short、int、long
每种整形数据又分为有符号(signed)与无符号(unsigned),在没有声明是否有符号时,默认数据为有符号(signed)。整形数据同其名字一般,是用来声明整数的数据。
1.short
short,即为短整形数据。“短”是相对整形数据int来比较的,在相同系统中所占内存空间不大于整形数据int。
short一般占用2个字节空间,也就是16位bit。有符号的short数据范围为-32768~32767,以补码方式储存;无符号型short数据范围为0~65536,以对应的二进制数储存。
2.int
int为整形数据。在c语言中,如果整形常量默认为int类型。
int一般占用4个字节空间,也就是32位bit。有符号的int数据范围为-21亿~21亿,以补码方式储存;无符号型short数据范围为0~42亿,以对应的二进制数储存。
3.long
long为长整形数据。与short类似,“长”是相对int比较的。在相同系统中所占内存空间不小于整形数据int。
long一般占用8个字节空间,也就是64位bit。有符号的long数据范围为-2^63~2^63-1,以补码方式储存;无符号型long数据范围为0~2^64,以对应的二进制数储存。
(2)浮点型数据
浮点型数据用来声明含小数部分的数据。由于十进制的含小数数据有部分不能转换为二进制小数,所以浮点型数据有很小的一部分误差。根据误差精度,浮点型数据分为单精度浮点数类型(float)和双精度浮点数类型(double)。浮点数类型均为有符号类型,没有无符号类型的概念。
浮点型数据在储存时使用类似科学计数法的方式,过程如下:
第一步,将数据转换为二进制小数。
第二步,使用二进制的科学计数法,将这个二进制小数整数位留1位,存入符号位。
第三步,将小数点后存入尾数位中。
最后一步,将二进制科学计数法中的指数+偏移数(float:127,double:1023)以二进制存入指数位。
1.float
float最多表示6-8位有效数字。占内存空间大小为4个字节。值域范围为-3.4*10^38-1~1.18*10^(-38)和1.18*16^(-38)~3.4*10^38。存储方式为1位符号位+8位指数位+23位尾数位。
2.double
double最多表示12-14位有效数字。占内存空间大小为8个字节。值域范围为-1.80*10^308~2.23*10^(-308)和2.23*10^(308)~1.80*10^308。存储方式为1位符号位+11位指数位+52位尾数位。
(3)字符型
char,字符型数据,存放# ?a A等符号。char分为有符号和无符号。有符号字符(signed char)占一个字节的内存空间,值域范围为-128~127;无符号字符(unsigned)占一个字节的内存空间,值域范围为0~255。存储方式为存储字符在ascii码表中对应数字的二进制形式。
(4)逻辑类型
bool,波尔类型。占一个字节的内存空间,分为true与false,分别表示0与1。
在C语言中所有的非0值均为逻辑真值
0值为逻辑假值
(5)缺省类型
void ,需搭配函数和指针使用。
(6)常量和变量
1.>常量: 在程序运行过程中值不允许发生改变的量
2.>变量: 在程序运行过程中值可以发生改变的量
3.>表达式:由一个或者多个运算符连接的变量和常量组成的式子
1.整形常量:
默认为int类型
2.整形变量:
变量要先定义再使用
变量定义的形式为:
数据类型 变量名;
1.变量名可以由字母、数字、下划线构成不能以数字开头
2.变量名不能与C语言关键字重名
3.变量名最好不要与库函数重名
4.变量名最好是见名知意
变量拥有存储空间,也有值域范围。
3.浮点型常量:
默认为double类型,在小数末尾加f可表示float类型
4.浮点型变量
用 double d;
float f;的格式声明