要点
数据表示
| 进制 |
表示 |
举例 |
| 二进制 |
后缀加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
移位
const
以const关键字申明的对象,其值不能通过赋值,递增或者递减修改
| C |
|---|
| 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 |
|---|
| //#宏创建字符串
#define TEST(x) printf(#x "is %d\n", x)
//##预处理粘合剂
#define NAME(x) NAME_##x
//变参宏
#define PRINT(...) printf(__VA_ARGS__)
|