第一章 概述
Good things are worth the wait.
美好的事物都值得等待。
标识符
命名规则:
标识符名很简单,字母数字下划线。
字母区分大小写,非数打头非关键。
常量
程序运行过程中值不会变化的成为常量。
C语言编译过程
C语言源程序 -> 目标程序 -> 可执行程序

进制
二进制转换十进制
十进制转换二进制

第二章 数据类型运算符和表达式
整形常量
// 十进制
a = 10;
// 八进制
a = 012;
// 十六进制
a = 0xA;
// 不允许写为二进制形式。
整型常量表示法,十进制数直接打。
数前添零进制八,十六进制再加叉。
数值类型
整型类型
int, short int, long int, long long int
| 类型 | 类型 | 备注 |
|---|---|---|
| short | 整数型 | 2个字节 |
| long | 长整型 | 4个字节 |
| signed | 有符号型 | 可以保存负数的整型变量(signed可省略) |
| unsigned | 无符号型 | 可保存正数和0,但不能保存负数的整型变量 |
| signed short int a | 有符号短整型 | 2字节,-32768 ~ 32767 |
| int | 整数型 | 4个字节 |
浮点类型(也称为实型)
float, double, 双精度浮点型
根据精度不同,克表示数据范围不同,根据实际情况选用。
| 类型 | 类型 | 备注 |
|---|---|---|
| float | 单精度型 | 4个字节,最大7位有效数字 |
| double | 双精度型 | 8个字节,最大15位有效数字 |
小数形式
float f;
f = 12.;
f = .36;
f = 1.0;
// 可以省略正数部分的0
// 也可以省略小数末尾的0
// 但必须有小数点。
指数形式
// E(或e)代表 x10
2.1E5 == 2.1 * pow(10,5);
-0.8E-2 = -0.8 * pow(10, -2);
...
// E(e)后面必须是正数,前后两边紧相连
整型变量和实型变量
整型变量:只能保存整数,不能保存实数。(例如:int)
实型变量:只能保存实数,不能保存正数。(例如:float, double)
常量后缀
L(或l)
整数后加为长整型(long),实数后加为长双精度型(long double)
0L, 12L, 1.2LU(或u)
只能加在整数后,表示常量为无符号型,不能表示负数。
0U, 6U
// 也可既用L又用U
12LU, 6LUF(或f)
表示常量为单精度型,加在整数后,则此数不为整数。
1.23f, 356F字符类型
单引号包裹的一个字符,称为字符常量。
单引号内必须为英文,只能有一个字符,每个字符常量占一个字节(8个bit位),单引号是定界符不属于字符内容。
ASCII码
标准ASCII码0~127,字符和整数是混用的,字符可边做对应的ASCII码
| ASCII码 | 详情 |
|---|---|
| 0~31, 127 | 控制字符(不可显示) |
| 32 | 空格字符 |
| 48~57 | 数字'0'~'9' |
| 65~90 | 'A'~'Z', |
| 97~122 | 'a'~'z',小写字母比大写多32 |
转义字符 '\'
\n 换行符
\a 响铃符
\t 制表符
\\ 表示 \ 字符
\' 表示 ' 字符
字符串
末尾 \0 表示字符串结束
| 字符常量 | 字符串常量 | |
|---|---|---|
| 引号 | 单引号 | 双引号 |
| 字符个数 | 只能占一个字符 | 可含0~多个字符 |
| 能否将值赋值给char型变量 | 可以 | 不可以 |
| 有无对应变量 | 有字符型变量 | 无字符型变量 |
| 占用内存字符数 | 一律一个字节 | 字符串字符数(长度)+1 |
算数运算符
优先级:
先乘除,后加减
*/%优先级相同,高于+-
+ - * / %自动类型转换
表达式的类型:
两个运算量类型一致时,与两个运算量的类型一致。
两个运算量类型不一致时,表达式的类型与其中较高类型运算量的类型一致(较低类型自动转换为高类型再运算)
char -> int -> float -> double
特殊:所有浮点数必然转换为 double 再运算(即使两个 float 型量的运算也会先转换为 double )取整数的个、十、百、千...
int a;
a = 123456;
// 个位
a%10;
// 十位
(a/10)%10
// 百位
(a/100)%10
...
// 取最高位时,a/100000 ,只会有一位数,不%10 也可以
习题
- 一个数位78378 取它的所有千位和百位
- 水仙花
赋值运算符
= 赋值运算符优先级再C语言中排倒数第二位
int n;
n = 8;
n += n *= n - 2;
// 拆分运算
n += n *= 6;
n += 48;
n = n + 48;
n = 96;
// 所以表达式的值为 96,表达式求值后的n的值为 96
自增和自减
i++
单目运算符 优先级很高,仅次于括号()
只能用于变量
i++ 计算后会修改i 自身的值
i++ 和 ++i 的区别
++在先,先加后用;
++在后,后加先用;
--在先,先减后用;
--在后,后减先用;
int a=1, b;
b = 5 - a++;
// 计算后,b=4 a=2
int a=1, b;
b = 5 - ++a;
// 计算后,b=3 a=2
逗号运算符和逗号表达式
逗号运算符优先级最低(倒数第一),顺序自左到右
// 运算符
int x=1, y=2, z;
z = (x++, y++);
z = 3;
// 表达式亦相同
位运算
2个条件
数据必须转换为二进制才能进行
只能对整型数据和字符型数据进行
按位与 & 和逻辑 && 不同
按位与 &

按位或 |

按位异或 ^
性质:
任何数与他的本身按位异或,结果都为0
a^k^k = a,可根据这个性质对数据加密

按位求反 ~
~是单目运算符,将数据转换为二进制后,将个二进制位反过来,0变1,1变0

左移 << 右移 >>
左移 <<
将
<<左边的数的各二进制整体左移若干位,由<<右边的数指定移动的位数。移出的位将被舍弃。一个数左移
i位,相当于乘以2的i次方
3 << 4
// 相当于
3 * (2*2*2*2)右移
将
>>左边的数的各二进制整体右移若干位,由>>右边的数指定移动的位数。移出的位将被舍弃。一个数左移
i位,相当于乘以2的i次方
15 >> 2
// 相当于
15 / (2*2)空类型
void
派生类型
- 指针类型 *
- 数组类型 []
- 结构体类型 struct
- 共同体类型 union
- 函数类型
Visual Stdio 快捷键
注释: Ctrl + K, Ctrl + C
取消注释:Ctrl + K , Ctrl + U