1. 变量与数据类型
(1) 基本数据类型
类型 |
存储大小 (典型) |
表示范围 |
示例 |
char |
1字节 |
-128~127 或 0~255 |
char c = 'A'; |
int |
4字节 |
-2,147,483,648~2,147,483,647 |
int i = 42; |
float |
4字节 |
±3.4e-38~±3.4e38 |
float f = 3.14; |
double |
8字节 |
±1.7e-308~±1.7e308 |
double d = 3.14; |
void |
- |
无类型 |
void func(); |
(2) 类型修饰符
- 扩展范围:
short
:短整型(通常2字节)
long
:长整型(4或8字节)
long long
:扩展长整型(C99,至少8字节)
- 符号性:
signed
:有符号(默认)
unsigned
:无符号(仅非负值)
示例:
unsigned short us = 65535; // 0~65535
long double ld = 3.1415926535;
2. 常量(Literals)
(1) 整型常量
(2) 浮点常量
(3) 字符与字符串常量
3. 运算符(Operators)
(1) 算术运算符
运算符 |
作用 |
示例 |
+ |
加法 |
a + b |
- |
减法/取负 |
-x |
* |
乘法 |
3 * 5 |
/ |
除法 |
7 / 2 → 3 |
% |
取模(余数) |
7 % 2 → 1 |
(2) 关系与逻辑运算符
运算符 |
作用 |
示例 |
== |
相等 |
if (x == 0) |
!= |
不等 |
while (c != EOF) |
&& |
逻辑与 |
if (x>0 && y>0) |
` |
|
` |
! |
逻辑非 |
if (!valid) |
(3) 位运算符
运算符 |
作用 |
示例 |
& |
按位与 |
flags & MASK |
` |
` |
按位或 |
^ |
按位异或 |
a ^ b (相同为0) |
~ |
按位取反 |
~0xFF → 0xFFFFFF00 |
<< |
左移(乘2^n) |
x << 2 |
>> |
右移(除2^n) |
x >> 1 |
(4) 赋值与复合运算符
x += y; // 等价于 x = x + y
x &= mask; // 等价于 x = x & mask
4. 类型转换(Type Conversions)
(1) 隐式转换(自动)
(2) 显式转换(强制)
double d = 3.14;
int i = (int)d; // 截断小数部分(i=3)
5. 表达式与语句
(1) 表达式求值顺序
- 优先级:
* / %
> + -
> << >>
> &
> |
> &&
> ||
- 结合性:大多数从左到右(赋值符从右到左)
x = y = 0; // 从右到左赋值
(2) 副作用与序列点
6. 关键编程技巧
(1) 统计二进制中1的个数
int bitcount(unsigned x) {
int b;
for (b = 0; x != 0; x &= (x - 1))
b++;
return b;
}
原理:x &= (x - 1)
清除最右侧的1
。
(2) 循环移位
unsigned rightrot(unsigned x, int n) {
int bits = sizeof(x) * 8;
n %= bits;
return (x >> n) | (x << (bits - n));
}
示例:rightrot(0x12345678, 4)
→ 0x81234567
。
7. 总结表格
主题 |
核心内容 |
数据类型 |
char 、int 、float 、double 及修饰符(short 、long 、unsigned ) |
常量表示 |
整型(0x 、0 前缀)、浮点(e 表示法)、字符(转义序列) |
运算符 |
算术、关系、逻辑、位运算的优先级与结合性 |
类型转换 |
隐式(自动提升)与显式(强制)转换 |
高效位操作 |
位掩码、移位、统计1 的个数 |
8. 为什么重要?
- 底层控制:直接操作硬件(如寄存器、位字段)。
- 性能优化:位运算比算术运算更快。
- 理解C本质:类型系统和运算符是C语言的核心设计哲学。
注:本章是后续学习指针、数组、结构体的基础,需深入理解!