【C 语言基础操作】位操作和 gdb 调试
一、位运算详解
1. 位运算符速查表
& 按位与 全1为1,有0为0 | 按位或 全0为0,有1为1 ^ 按位异或 相异为1,相同为0 ~ 按位取反 1取反为0,0取反为1 << 按位左移 按位左移,低位补0 num << n <--> num * 2^n >> 按位右移 按位右移,高位补符号位 num >> n <--> num / 2^n
2. 位运算的典型应用
(1)指定 n 位置 1
1010 0000 | 0000 1000(1 << 3) = 1010 1000 num = num | 1 << n; // << 优先级高于 |
(2)指定 n 位置 0
1010 1010 & 1111 0111(~(1 << 3)) = 1010 0010 num = num & ~ (1 << n); // ~ 优先级高于 <<,高于 &
(3)两数交换(不使用中间变量)
// 按位异或方式 a = a ^ b; b = a ^ b; // b = (a ^ b) ^ b = a ^ 0 = a a = a ^ b; // a = (a ^ b) ^ a = 0 ^ b = b a ^ a == 0 a ^ 0 == a // 求和方式 a = a + b; b = a - b; // b = (a + b) - b = a a = a - b; // a = (a + b) - a = b
3. 位运算符的优先级
~ 高于 << 高于 >> 高于 & 高于 ^ 高于 |
二、程序调试方法
1. 打印调试
程序运行过程中打印输出: printf("num = %d\n", num);2. gdb 调试
gdb 是 GNU 提供的 Linux 下的代码调试工具。
(1)使用 gdb 调试逻辑错误;
(2)使用 gdb 调试段错误。
r
where 定位段错误的位置。
1. 编译程序:-g 选项,允许使用 gdb 调试 gcc main.c -g 2. 使用 gdb 调试程序: gdb ./可执行程序 gdb ./a.out 3. gdb 指令 l 列出源代码 b+行号 在指定行打断点 r 运行程序 n 执行下一条代码 p+变量名 查看变量值 q 退出 gdb s 跟进函数