一 c语言基础
1进制转换:
二进制,八进制,十六进制
二进制:0 1
八进制: 0 1 2 3 4 5 6 7
十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f
低进制往高进制时:
对应位乘以对应位的权值再求和
高进制往低进制:
高进制数除以低进制数得到的余数逆序排列
2 程序在c语言中的运行方式
程序(外存中)
执行(加载到内存中)
执行程序结束(回收内存空间)
3 数字在内存中的存储:
正数在计算机中存储对应的二进制数
负数在计算机中存放补码
1.原码
2.反码
3.补码
4.内存数据
4.gcc编译的流程步骤:
gcc filename.c
1预处理
(1)头文件展开
(2)宏定义替换
#define M 100
(3)条件编译
gcc- E filename.c -o filename.i
2 编译
将c语言程序编译成汇编代码
gcc -S filename.c -o filename.s
3 汇编
将汇编代码编译成二进制代码
gcc filename.c -o filename.o
4 链接
将多个二进制代码链接为一个可执行程序
gcc filename.c -o filename
二 c语言中的数据类型分类
占内存空间 值域范围 存储方式
(1)short :短整型 2字节空间 -32768 - 32767 补码
(2)long :长整型 8个字节空间 -2^63 - 2^63 -1 补码
3)int 整型 4个字节空间 -21亿 - 21亿 补码
(4)float 单精度浮点型 4个字节 -3.4*10^38 - 1.18*10^-38 1位符号位 + 8位指数位 + 23位尾数位
(5)double 双精度浮点型 8个字节空间 -1.80*10^308 - 2.23*10^-308 1位符号位 + 11位指数位 + 52位尾数位
(6)char 字符型 1个字节空间 0-255 存储字符在ASCII码表中对应数字的二进制形式
(7)bool 泊尔 1个字节空间 true false 1 或者0
(8)void 缺省类型
三 c语言中的常量和变量:
1.常量 :在程序运行过程中值不允许发生改变的量
eg:#include <stdio.h>
(1)浮点型常量:
3.14.5 默认为double类型
3.1415f 为 float类型
3.14e10 为double类型
用e代表乘以10的多少次方
(2)浮点型变量:
浮点型都是有符号的
%d被称为占位符 以十进制整数方式打印
%u 以无符号十进制的方式输出无符号整型
%lu 以十进制方式输出无符号长整型
%lf 以小数形式输出双精度浮点数
%f 以小数形式输出单精度浮点数
%c 以字符形式输出字符
(3)字符型常量
‘a’'A' 'Z' '?'
字符型常量只能用一个字符
'\'为转义字符
'\b'为退行字符
'\n'为换行符
'\t'为横向制表符
'\v'为纵向制表符
'\r' 为回车符
'\b' 为退格符
'\\' 为\符
'1'-> ASCII码表->49,为字符1
'0'为字符0,ASCII码为48
'\0'为字符反斜杠0,用来标识字符串的结尾,对应的ASCII 码为0 ,在界面上什么都不显示
'\123' 八进制123对应的字符,为S
'\x32'十六进制32对应的字符
(4)字符串常量
字符串常量一定要用‘’‘’包起来
宏只是代码的替换,中间不进行任何数据计算的操作
宏名都是大写,用来和变量区分
每个字符串末尾都有一个\0
2.变量:在程序运行过程中值允许发生改变的量
(1)变量需要先定义再使用
变量定义的形式
(11)变量名可以由字母数字下划线构成,但是不能以数字开头
(12)变量名不能和c语言关键字重名(比如int,lon等不能当变量名)
(13)变量名最好不要与库函数重名
(14)变量名最好要做到见名知意(驼峰法命名:第一个单词以小写字母开始,从第二个 单词开始以后的每个单词的首字母都采用大写字母,内核命名法)
(2)变量拥有存储空间,也有值域范围
(3)字符型变量 char
(4)定义变量的同时赋给他初值才叫初始化
如果先定义 后面给值的过程叫赋值
未经初始化的变量的值是任意的
(5)类型转换
(11)显示类型转换(强制转换)
(int)3.14;
(double)100
显示类转换只会转换一次
(12)隐式类型转换
表达式: 一个多个变量和常量组成的式子
原则:低精度转化成高精度
同种类型所占内存空间越大精度越高
无符号精度高于有符号精度
float类型精度大于int类型
float类型进行数据运算和数据处理时会以double类型计算
char和short类型进行数据运算和数据处理时会以int类型运算
3.常量和变量可以组成表达式:由一个或者多个运算符连接的变量和常量组成的式子
(1)整形的常量和变量
整形常量默认为int类型
100 : int类型
100l : long类型
100ul: unsign long 类型
100u :unsigned int 类型
注: 如果以0开头默认为八进制常量
如果以0x开头默认为十六进制常量
在linux中可以用man ascii 来查询ASCII表
四 . 运算符
1.算数运算符
+ - *
/:除数不能除以0
%:取余运算符,不能对浮点型操作
++:自增运算符:只能变量用 i++ 先用再加 ++i 先加再用
- - :自减运算符:只能变量用
2. 赋值运算符
a*=b+c 结果为a=a*(b+c)
+=
a+=b的意思是a=a+b
左值: 允许放在赋值运算符左边的值,只有变量能作为左值··
右值:允许放在赋值运算符右边的值:常量,变量,常量变量组成的表达式
如果左值为浮点数类型,右值为整形,会将值扩展精度
如果左值为整数,右值为浮点数类型,会舍弃精度
左右两边均为整形时:会直接将右值拷贝到左值去
小数据放入大空间:数据拓展 ,有符号数高位补符号位,无符号数高位补0
大数据放入小空间:数据压缩,直接截取数据低位放入小空间
3.运算符:从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果
4.目运算符: 表达式 ? 表达式一:表达式二
5.sizeof运算符:
3.算符优先级
1 结合方向自左至右(单目运算符赋值运算符和三目运算符的结合方向是自右向左)
五.c语言中常用的输入输出函数;
1.getchar putchar
(1)putchar :
功能:在终端打印一个字符
注:1.印多个字符时只能多次调用putchar
2.只能打印字符
(2)getchar
功能:从终端接收一个字符。
getchar会将程序阻塞,知道用户输入数据,程序才能继续向下进行
getchar 只能接收一个字符,想要接收多个字符需要多次调用
(3)
2.scanf
printf
3.gets
puts