C语言(5)—操作符详解
文章目录
- 一、操作符分类概览
- 二、二进制与进制转换
- 2.1 进制基本概念
- 三、原码、反码与补码
- 3.1 基本概念
- 四、位操作符详解
一、操作符分类概览
C语言中的操作符可以分为以下几大类:
算术操作符:+, -, *, /, %
移位操作符:<<, >>
位操作符:&, |, ^, ~
赋值操作符:=, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^=
单目操作符:!, ++, --, &, *, +, -, ~, sizeof, (类型)
关系操作符:>, >=, <, <=, ==, !=
逻辑操作符:&&, ||
条件操作符:?:
逗号表达式:,
下标引用:[]
函数调用:()
结构成员访问:., ->
二、二进制与进制转换
2.1 进制基本概念
二进制:基数为2,数字为0和1
八进制:基数为8,数字0-7(前缀0)
十进制:基数为10,数字0-9
十六进制:基数为16,数字0-9和A-F(前缀0x)
三、原码、反码与补码
3.1 基本概念
原码:最高位表示符号(0正1负),其余位表示数值
反码:正数同原码;负数符号位不变,其余位取反
补码:正数同原码;负数为反码+1
四、位操作符详解
4.1 移位操作符
4.1.1 左移操作符 (<<)
规则:高位丢弃,低位补0
c
int a = 5; // 00000101
int b = a << 2; // 00010100 → 20
4.1.2 右移操作符 (>>)
两种方式:
逻辑右移:高位补0,低位丢弃
算术右移:高位补符号位,低位丢弃(常见实现)
c
int a = -8; // 11111000 (补码)
int b = a >> 2; // 11111110 → -2 (算术右移)
4.2 位逻辑操作符
& (按位与):两位都为1时结果为1
| (按位或):任一位为1时结果为1
- ^ (按位异或):两位不同时结果为1
- (按位取反):0变1,1变0
应用示例:
c
// 交换两个变量的值(不使用临时变量)
void swap(int *a, int *b) {
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
// 判断奇偶
bool isOdd(int num) {
return num & 1;
}