涉及数制、进制、码制相关知识点:
目录
一、C语言词汇
1.1 标识符(考点)
即程序中使用的变量名、数组名、函数名等
- 只能包含 字母(Aa~Zz)、数字(0-9)、下划线(_) 简洁有意义
- 只能字母和下划线开头
- 大小写敏感:C语言区分大小写,字母大写和小写是不同的变量名
- 避免使用保留字:不能使用C语言的关键字和保留字作为变量名
main()函数和库函数 不能由用户命名

1.2 关键字
注意:下面这些不使关键字
define(宏定义预处理指令)、include(宏包含预处理指令)、
getc、printf、scanf、pow(标准库函数名)
type、go
(1)sizeof() ☆考点
- sizeof(类型):类型占用的内存字节数
- sizeof(变量或表达式):变量或表达式所属类型所占的内存字节数
增加程序的可执行性
编译时执行的运算符,不会导致额外的运行时间开销
(2)typedef() ☆考点
typedef:为现有数据类型创建一个新的名字。typedef 数据类型 别名
1.3 运算符
- 算术运算符(7个):+、-、*、/、%、++、--
- 关系运算符(6个):>、<、>= 、<=、==、!=
- 逻辑运算符(3个):&&、||、 !
- 赋值运算符(1个):=
- 位运算符(6个):<<(向左移位)、>>(向右移位)、~(取反)、 |(按位或)、^(按位异或)、&(按位与)
a=3;a<<4; | 00000011(十进制3) 向左移4位 00110000(48) |
a=15;a>>2; | 00001111(十进制15) 向右移2位 00000011(3) |
~9; | 0000000000001001(十进制9)取反1111111111110110 |
9|5=13; | 两数对应的二进制位执行或运算,一真为真,双假为假 |
9^5=12; | 两数对应的二进制位相异或,值相同为0,相反为1 |
9&5=1; | 两数对应的二进制位执行与运算,双真为真,一假为假 |
☆运算符优先级
运算符分为单目(一元),双目(二元)和三目(三元)。顾名思义,目,即运算符操作数的个数
类型 | 说明 | 举例 |
---|---|---|
单目 | 操作数只有一个,从右向左 | a++(a自增1) |
双目 | 操作数有两个,从左向右 | a + b(两数之和) |
三目 | 目前仅有条件运算符 | a ? b : c(如果a为真,结果为b,否则为c |
优先级 | 运算符 | 名称或含义 | 使用形式 | 说明 | 方向 |
1 | [] | 数组下标 | 数组名[常量表达式] | ---- | 左到右 |
() | 圆括号 | (表达式) | |||
函数名(形参表) | |||||
. | 成员选择(对象) | 对象.成员名 | |||
-> | 成员选择(指针) | 对象指针->成员名 | |||
2 | - | 负号运算符 | -表达式 | 单目 | 右到左 |
(类型) | 强制类型转换 | (类型名)表达式 | |||
++ | 自增 | 单目 | |||
-- | 自减 | --变量名 | |||
变量名-- | |||||
* | 取值 | *指针变量 | |||
& | 取地址运算符 | &变量名 | |||
! | 逻辑非 | !表达式 | |||
~ | 按位取反运算符 | ~表达式 | |||
sizeof | 长度运算符 | sizeof(表达式) | |||
3 | / | 除 | 得到的整数部分 | 双目 | 左到右 |
* | 乘 | 表达式*表达式 | |||
% | 求余(取模) | 必须是整型,整除后的余数 | |||
4 | + | 加 | 表达式+表达式 | ||
- | 减 | 表达式-表达式 | |||
5 | << | 左移 | 变量<<表达式 | ||
>> | 右移 | 变量>>表达式 | |||
6 | > | 大于 | 表达式>表达式 | ||
>= | 大于等于 | 表达式>=表达式 | |||
< | 小于 | 表达式<表达式 | |||
<= | 小于等于 | 表达式<=表达式 | |||
7 | == | 等于 | 判断是否相等 | ||
!= | 不等于 | 判断是否不等 | |||
8 | & | 按位与 | 表达式&表达式 | ||
9 | ^ | 按位异或 | 表达式^表达式 | ||
10 | | | 按位或 | 表达式|表达式 | ||
11 | && | 逻辑与A | A和B | ||
12 | || | 逻辑或 | A或B | ||
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 三目 | 右到左 |
14 | = | 赋值 | 变量=表达式 | --------- | 右到左 |
/= | 除后赋值 | 变量/=表达式 | |||
*= | 乘后赋值 | 变量*=表达式 | |||
%= | 取模后赋值 | 变量%=表达式 | |||
+= | 加后赋值 | 变量+=表达式 | |||
-= | 减后赋值 | 变量-=表达式 | |||
<<= | 左移后赋值 | 变量<<=表达式 | |||
>>= | 右移后赋值 | 变量>>=表达式 | |||
&= | 按位与后赋值 | 变量&=表达式 | |||
^= | 按位异或后赋值 | 变量^=表达式 | |||
|= | 按位或后赋值 | 变量|=表达式 | |||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 |
二、常量和变量
程序执行过程中,取值不发生改变的量是常量,取值可变的是变量
2.1 常量
2.1.1 字面常量
(1)整型常量
整形常量 | 前缀 | 合法示例 |
---|---|---|
八进制整常数 | 0 | 0,016,0101 |
十六进制整常数 | 0x 或 0X | 0x1A,0XFFFF |
十进制整常数 | 无前缀 | 123,456,7890 |
(2)浮点型常量
实型常量 | 描述 | 合法示例 |
---|---|---|
十进制小数形式 | 由数字 0~9 和小数点组成。 | 0.0,-2.87,.5,1,3.14 |
指数形式 | 由十进制数、e 或 E 以及指数组成。 | 1.5e10,-2.5E-3,6.02e23 |
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | -3.4E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | -1.7E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | -1.1E-4932 到 1.1E+4932 | 19 位小数 |
(3)字符型常量
- 由单引号括起来的一个字符 如'x','y'等都是合法的字符。
- 以反斜杠\开头的字符序列,被称为“转义”字符
字符表示 | 功能 |
---|---|
\n | 换行 |
\t | 横向跳到下一制表位置 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜线 |
\ddd | 1-3 位八进制数所代表的字符 (ASCII) |
\xhhh | 1-2 位十六进制数所代表的字符 (ASCII) |
2.1.2 符号常量
(1)宏常量
定义方法:#define 标识符 字符串(替换文本有没有都合法)
- 使用标识符,在使用前需要先定义
- 慎用符号(考虑要不要分号)
- 预编译/预处理发生替换:编译预处理结果 + 源程序编译 ——>编译得到目标代码
- 【注意】#define N 20 宏定义只是简单的文本替换,不是赋值,不能说"定义N的值为20"
缺点:
- 没有数据类型,编译器在进行宏替换时不进行类型检查
- 只进行简单的字符串替换,极易产生意想不到的缺点
- 在C语言中,凡是#开头的都是 编译预处理命令行(如:#define、#include、#if),每行末尾不能用分号
- 除了宏定义语句和复合语句,其余都要分号结束
(2)const常量
- 有数据类型,进行类型检查
- 某些集成化调试工具可以对其进行调试
2.2 变量
(1)变量的定义/声明
变量使用之前必须先声明变量,只有一次
int main() {
int a;
int b,c; //定义变量
}
(2)变量的赋值
变量使用之前一定要赋值
变量使用“=”赋值,等号左侧为左值,等号右侧为右值
int main(){
int a,b;
char ch;
a=3,b=4;
ch= 'c';
}
int main(){
int a = 3,b =4;
char ch ='c'; //初始化
double d = 3.14, e = 2.58; //定义变量并初始化
ch = 'd'; //赋值:变量已存在(对应空间已开辟),将字符d直接放到一个已经存在的空间中
}
三、数据类型
整型变量只能存放整数,实型变量只能存放浮点数
3.1 字符类型
☆练习题
3.2 变量的类型决定了什么?
地址:每个变量都分配了一个内存地址
- 使用&(地址运算符)获取变量的内存地址
- 通过指针访问和操作变量的内存地址
32位机的内存地址是32位,从0x00000000到0xFFFFFFFF
编译器按照变量定义的类型分配相应大小的内存空间
3.3 占用内存空间的大小
如:unsigned类型 VS 有符号类型;整数型VS 浮点数;字符型 VS 整型
3.4 不同数据类型的表示范围
与解释方式和长度有关
float大概能表达6-7位小数
char ——> 1字节 ——>8位——> 有1个符号位
unsigned char ——> 1字节 ——>8位——>没有符号位
3.5 可参与的运算
整型 :加减乘除余
浮点型:加减乘除
字符型:加减 (ASCII码)
3.6 字节存储顺序
主要分为大端序
(Big-endian)和小端序
(Little-endian),区别如下
类型 | 解释 | 备注 |
---|---|---|
Big-endian | 高位字节存入低地址,低位字节存入高地址 | 与从左到右的书写顺序相同,便于处理字符串 |
Little-endian | 低位字节存入低地址,高位字节存入高地址 | 便于计算机从低位字节向高位字节运算 |
3.7 计算机存储的 +1 和 -1?
计算机中所有的数据都是采用补码存放的。
符号位 0 为正、1 为负
正整数 —— 源码存储,最高位为 0(正) ,正数:原码 =补码负整数—— 补码存储,最高位为 1 (负),负数:补码=原码符号位不变,其余各位取反,在+1
四、表达式
表达式 = 运算符 + 运算对象
不是所有语句都有表达式 如:print("a");
运算结果取决于占内存大的运算对象的数据类型
----------------回看运算符优先级部分↑-----------------
(1)强制类型转换表达式
2种类型转换:
- 一种是自动,在运算时不需要用户指定,系统自动进行的类型转换,如3+6.5
- 一种就是强制,当自动不能实现目的时,可以用强制
int b =7; float a = 2.5,c = 4.7;
a + (int)(b/3 *(int)(a+c)/2.0)%4
=2.5 +(int)(2 * 7/2.0)%4
=2.5 + 7 %4
= 2.5+3
= 5.5
(2)赋值表达式
(3)运算表达式(自增自减)
int m =1; n = ++m; | m先自增1,再赋值给n,所以n=2 |
int m = 1; n = m++; | m先赋值给n,m再自增1,所以n=1 |
----------------回看运算符优先级部分↑------------------
五、附:标准 ASCII 码对照表
ASCII 值 | 控制字符 | ASCII 值 | 字符 | ASCII 值 | 字符 | ASCII 值 | 字符 |
---|---|---|---|---|---|---|---|
0 | NUL | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | ' | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | \ | 124 | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |