跳转至

要点


数据表示

进制 表示 举例
二进制 后缀加b 111b
八进制 前缀加0 012
十六进制 前缀加0x或0X 0xFF,0xff

运算符优先级

优先级 运算符 名称或含义 使用形式 结合方向 说明
1 [ ] 数组下标 左到右
1 ( ) 函数调用 左到右
1 . 成员选择(对象) 左到右
1 -> 成员选择(指针) 左到右
2 - 负号运算符 右到左 单目运算符
2 (类型) 强制类型转换 右到左
2 ++ 前置自增运算符 右到左 单目运算符
2 ++ 后置自增运算符 右到左 单目运算符
2 -- 前置自减运算符 右到左 单目运算符
2 -- 后置自减运算符 右到左 单目运算符
2 * 取值运算符 右到左 单目运算符
2 & 取地址运算符 右到左 单目运算符
2 ! 逻辑非运算符 右到左 单目运算符
2 ~ 按位取反运算符 右到左 单目运算符
2 sizeof 长度运算符 sizeof(表达式) 右到左
3 / 左到右 双目运算符
3 * 左到右 双目运算符
3 % 取模 左到右 双目运算符
4 + 左到右 双目运算符
4 - 左到右 双目运算符
5 << 左移 左到右 双目运算符
5 >> 右移 左到右 双目运算符
6 > 大于 左到右 双目运算符
6 >= 大于等于 左到右 双目运算符
6 < 小于 左到右 双目运算符
6 <= 小于等于 左到右 双目运算符
7 == 等于 左到右 双目运算符
7 != 不等于 左到右 双目运算符
8 & 按位与 左到右 双目运算符
9 ^ 按位异或 左到右 双目运算符
10 | 按位或 左到右 双目运算符
11 && 逻辑与 左到右 双目运算符
12 || 逻辑或 左到右 双目运算符
13 ?: 条件运算符 表达式1? 表达式2: 表达式3 右到左 三目运算符
14 = 赋值运算符 右到左
14 /= 除后赋值 右到左
14 *= 乘后赋值 右到左
14 %= 取模后赋值 右到左
14 += 加后赋值 右到左
14 -= 减后赋值 右到左
14 <<= 左移后赋值 右到左
14 >>= 右移后赋值 右到左
14 &= 按位与后赋值 右到左
14 ^= 按位异或后赋值 右到左
14 = 按位或后赋值变量 右到左
15 , 逗号运算符 表达式,表达式,… 左到右 从左向右顺序运算

类型转换

由小到大

  • 有符号→有符号, 数值不变
  • 有符号→无符号, 前面补0,数值变为无符号;
  • 无符号→无符号, 数值不变
  • 无符号→有符号,数值不变

由大到小

  • 有符号→有符号,丢掉高位多余字节,剩余按补码形式求数值
  • 有符号→无符号,丢掉高位多余直接,剩余按原码表示数值
  • 无符号→有符号,丢掉高位多余字节,剩余按补码形式求数值
  • 无符号→无符号,丢掉高位多余直接,剩余按原码表示数值

溢出

浮点数上溢 infinity 无穷大
浮点数下溢 NaN, not a number

移位

  • 无符号数左移右移均补0
  • 有符号左移补0;右移补1

const

以const关键字申明的对象,其值不能通过赋值,递增或者递减修改

C
1
2
3
int const *p; // p指向const类型的int变量
const int *p; // p指向const类型的int变量
int *const p; // p是const类型的指针,p的值不能改,必须指向同一个地址

static

修饰函数时,函数具有文件作用域
修饰全局变量时,变量具有文件作用域
修饰局部变量时,该变量存在data段

volatile

告知编译器,该变量可能会发生变化,编译器不能优化该变量的存储空间
常用来修饰寄存器变量,或者IO变量,或多线程共享变量

printf

转换说明 输出
%a %A 浮点数 十六进制数
%c 单个字符
%d %i 有符号十进制整数
%e %E 浮点数 e记数法
%f 浮点数 十进制记数法
%g %G 根据值的不用自动选择%f或%e
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x %X 无符号十六进制整数
%% 打印一个百分号
修饰符 含义
标记 - + 空格 # 0 用法见下表
数字 最小字段宽度
.数字 精度
h 和整型一起使用,表示short int或unsigned int short
hh 和整型一起使用,表示signed char或unsinged char
j 和整型一起使用,表示intmax_t或uintmax_t
l 和整型一起使用,表示long int或unsigned long int
ll 和整形一起使用,表示long long int或unsigned long long int
L 和浮点转换一起使用,表示long double类型的值
t 和整形转换说明一起使用,表示ptrdiff_t类型的值
z 和整形转换说明一起使用,表示size_t类型的值
标记 含义
- 待打印项左对齐
+ 在符号数前面加上正负号
空格 若有符号值为正,则在值前面显示前导空格;如值为负数,则在前面显示减号
# 把结果转换为另一种形式。如果是%o格式,则以0开始;若是%x格式,则以0X开始
0 对于数值格式,用前导0代替空格填充字段宽度

#define中使用参数

C
1
2
3
4
5
6
7
8
//#宏创建字符串
#define TEST(x) printf(#x "is %d\n", x)

//##预处理粘合剂 
#define NAME(x) NAME_##x

//变参宏
#define PRINT(...) printf(__VA_ARGS__)