二、C语言
2.1基本数据类型
1.C语言开发步骤
(1) vi编辑器
1.使用vi打开软件
vi filename.c
vi编辑器三种模式:
底行模式(默认,其余模式可以ESC进入底行模式)
插入模式(底行模式输入i、a、o均可进入插入模式)
命令模式(底行模式输入: 进入命令模式)
:wq 保存并且退出
:w 只保存不退出
:q 直接退出
:q! 不保存强制退出
:wq! 强制保存并且退出
2. 点击 i 键进入插入模式
3. 编写代码
#include <stdio.h>
int main(void)
{
printf("Hello World!\\n");
return 0;
}
4. 点击ESC
5. 输入:wq保存并且退出
(2)gcc编译器
1.编译C语言代码
gcc filename.c
gcc filename.c -o filename
注意:
如果不指定生成二进制的程序名,默认会生成a.out
如果编译报错需要重新打开代码修改语法问题
如果编译报警告,最好打开代码修改告警问题
2.gcc编译流程
预处理
处理和#号相关的代码
#include 头文件包含
将头文件中的内容展开
#define 宏定义
将宏定义完成替换
#if #endif #else #elif #ifndef #ifdef 条件编译
gcc -E filename.c -o filename.i
编译
将C语言代码编译成汇编代码
gcc -S filename.c -o filename.s
汇编
将汇编代码编译成二进制代码
gcc -c filename.c -o filename.o
链接
将多个二进制代码链接为一个可执行程序
gcc filename.c -o filename
(3)运行代码
./二进制程序名
2.基础知识
(1)程序如何在计算机中运行
1. 编写C语言代码和编译好的二进制可执行程序都存放在外存中
2. 当执行代码时,会将外存中的二进制代码放入内存中执行与CPU交互实现对应功能
3. 当代码执行结束后,会将内存中二进制代码及其执行空间回收掉
(2)计算机中数据量的单位
1. 计算机中只有0、1二进制数据
2. 1bit(位)
3. 1byte(字节) == 8bit
4. 1kb == 1024 bytes
5. 1mb == 1024 kb
6. 1gb == 1024 mb
7. 1tb == 1024 gb
(3)进制转换
1. 二进制(0b):逢二进一 0 1
2. 八进制(0/0o):逢八进一 0 1 2 3 4 5 6 7
3. 十进制:逢十进一 0 1 2 3 4 5 6 7 8 9
4. 十六进制(0x):逢十六进一 0 1 2 3 4 5 6 7 8 9 a b c d e f
5. 二进制、八进制、十六进制转十进制
对应位 * 对应位的权值再求和
6. 十进制转二进制、八进制、十六进制
十进制数除以进制数得到的余数逆序排列
7. 二进制转换为八进制
二进制三位对应八进制1位
8. 二进制转换为十六进制
二进制四位对应十六进制1位
3.基本数据类型
数据类型:数据对象的特性
基本数据类型:C语言中已经定义好的数据类型
整数类型:123
浮点数类型:(小数类型/实数类型) 3.14
字符型:'A' '!'
逻辑类型:true false
缺省类型:void
构造数据类型:需要用户自己定义的数据类型
(1)整数类型
1.short(短整型)
占2个字节
singed short(默认):
signed short类型最左边的1bit表示符号位(0为正、1为负),其余位表示数据位(数据
位按照补码存放)
负数补码=原码->反码+1
signed short类型表示范围:-32768 — 32767
unsigned short:
unsigned short类型所有字节空间均存储数据位
unsiged short类型表示范围: 0 — 65535
2.int(整型)
占4个字节
singed int(默认):
signed int类型最左边的1bit表示符号位(0为正、1为负),其余位表示数据位(数据
位按照补码存放)
signed int类型表示范围:-21亿 — 21亿
unsigned int:
unsigned int类型所有字节空间均存储数据位
unsiged int类型表示范围: 0 — 42亿
3.long(长整型)
占8个字节
singed long(默认):
signed long类型最左边的1bit表示符号位(0为正、1为负),其余位表示数据位(数据
位按照补码存放)
signed long类型表示范围:-2^32 — 2^32 -1
unsigned long:
unsigned long类型所有字节空间均存储数据位
unsiged long类型表示范围: 0 — 2^64 -1
(2)浮点数类型
1.float(单精度浮点数类型)
占4个字节
所有的float类型均为有符号
1位符号位 + 8指数位 + 23尾数位
float类型 6-8位有效数字
2.double(双精度浮点数类型)
占8个字节
所有的double类型均为有符号
1位符号位 + 11指数位 + 52尾数位
double类型12-16位有效数字
(3)字符型
char:该类型主要用于表示存储字符类型
占1个字节
singed char(默认):
signed char类型最左边的1bit表示符号位(0为正、1为负),其余位表示数据位(数据
位按照补码存放)
signed char类型表示范围:-128 — 127
unsigned char:
unsigned char类型所有字节空间均存储数据位
unsiged char类型表示范围: 0 — 255
ASCII码表:规定字符和数字之间转换关系
表示所有能够在屏幕上显示或者键盘输入的字符
32号之前主要用于通信控制
(4)波尔(bool)类型/逻辑类型
bool类型的值域范围:true(1)、false(0)
C语言中非0值即为逻辑真值,0值为逻辑假值
(5)缺省(void)类型
主要用于搭配函数传参、指针来使用
4.常量和变量
(1)常量
1.整型常量
默认为signed int类型
-123
100
123U
123u
123UL
123ul
123l
123L
0123
0x1a
0X1F
2.浮点型常量
默认为double类型
5.12
12.34
3.14f
5.34F
12.56e5
-13.98e-10
99.34E8
3.字符常量
字符型常量必须加' ',只能写1个字符
'a';
'A';
'Z';
'!';
'~';
''';
'"';
' ';
'0';
'1';
'9';
'\\n';换行符,光标移到下一行开头
'\\a';响铃警报,输出时终端蜂鸣
'\\b';退格符,光标向左回退一格
'\\r';回车符,光标回到本行最左侧
'\\t';水平制表符,横向跳格(通常占 4/8 空格宽度)
'\\v';垂直制表符,纵向换行跳行
'\\\\';反斜杠本身,用来输出一个\\
'\\0';空终止符,ASCII 0,C 语言字符串结束标记
'\\065';
'\\x41';
4.字符串常量
字符串最末尾会有一个用来标识结尾的\\0字符
“a”是由'a'和'\\0'组成,与'a'不等价
5.标识常量
#define 宏定义
增强代码的可读性,避免魔鬼数字
宏定义只是代码的替换,不会执行任何数据计算的操作
宏定义中能加括号就加括号
#define M (50)
#define N ((M)+(M))
(2)变量
在程序运行过程中,值可以发生改变的量
变量因为在内存中有存储空间,所以可以通过向存储空间赋值来修改变量的值
变量必须先定义再使用
开辟对应类型的变量空间,空间名称为变量名,通过变量名可以访问该空间,存取
变量中的数据时必须按照变量类型完成对数据的操作
1.变量的定义
数据类型 变量名;
数据类型:基本数据类型
构造数据类型
变量名:只能由字母、数字、下划线构成,不能以数字开头
不能与C语言关键字重名
最好不要与C语言库函数重名
变量名最好做到见名知意(驼峰法、Linux内核 GNU)
整形变量定义:
short var;
unsigned short var;
int var;
unsigned int var;
long var;
unsigned long var;
浮点型变量定义
float var;
double var;
字符型变量定义
char var;
unsigned var;
泊尔类型变量定义
#include <stdbool.h>
bool var;
2.变量的初始化
初始化:定义变量时为变量赋初值,称为初始化
赋值:变量定义完毕后,通过“=”对变量空间赋值,将“=”右边的值拷贝到“=”左边的
空间
注意:如果变量不初始化,变量为随机值,所以变量一定要初始化,不要使用未经
初始化的变量
(3)表达式
概念:由运算符连接的常量或变量组成的式子
特点:表达式一定有类型
表达式一定有值
1.混合数据数据类型运算
如果运算符左右两端类型不一致,需要转换为同一类型进行运算
转换规则
低精度类型转换为高精度类型
浮点数类型精度 > 整数类型精度,同一类型所占空间越大精度越高
无符号类型精度 > 有符号类型精度
char、short在数据运算时会强制换转为int进行数据运算和数据处理
float在数据运算时会强制换换位double进行数据运算和数据处理
类型转换
1. 强制类型转换(显示类型转换)
(类型)表达式/变量
2. 隐式类型转换
主要发生在混合数据类型运算和处理时,低精度转换为高精度
(4)运算符
1.算数运算符
+(加法)、-(减法)、*(乘法)、/(除法)、%(取余)、+(自增)、–(自减)
%:唯一不能对浮点数操作的算数运算符
++/–:只能对变量操作
2.赋值运算符
=、+=、-=、*=、/=、%=
左值:变量可以作为左值
常量/表达式不能作为左值
右值:变量/常量/表达式都可以作为右值
混合类型赋值处理方式:
1. 整形赋值给浮点数类型,扩展精度
2. 浮点数类型赋值给整形,舍弃小数点后的精度数据
3. 如果有符号和无符号整形互相赋值,会直接完成内存空间的拷贝
4. 小数据放入大空间,有符号数扩符号位,无符号数扩0
5. 大数据放入小空间,直接截取数据低位
3. 逗号运算符
从左到右依次执行逗号表达式,并将最后一个逗号表达式的结果作为整体的结果
4. sizeof运算符
sizeof可以获得数据类型或者变量所占内存空间大小(单位:字节)
5. 运算符优先级
括号 > 单目 > 双目(算数 > 移位 > 关系 > 位 > 逻辑) > 三目 > 赋值 > 逗号
网硕互联帮助中心





评论前必须登录!
注册