嵌入式从0到精通——C语言位运算
1.位运算
& 按位于 全1为1,有0为0 | 按位或 有1为1,全0为0 ^ 按位异或 相同为0,相异为1 ~ 按位取反 1取反为0,0取反为1 << 按位左移 按位左移,低位补0 nun << n <==> num << 2^n >> 按位右移 按位右移,有符号数,高位补符号位 num >> n <==> num/2^n位运算的使用:
1.指定n位置1
0000 0000 --> 0000 0100 0000 0001 1 << 3 0000 0000 1010 0000 | 0000 1000 1010 1000 num = num | 1 << n;2.指定n位清0
1010 1000 --> 1010 0000 1111 0111 // 1 << 3 然后取反 1010 1000 & 1111 0111 1010 0000 num = num & ~(1 << n);3.两数交换
// 使用异或运算交换两个整数 int a = 5; // 二进制: 0101 int b = 3; // 二进制: 0011 // 第一步: a = a ^ b // a = 0101 ^ 0011 = 0110 (6) // b = 0011 (3) // 第二步: b = a ^ b // a = 0110 (6) // b = 0110 ^ 0011 = 0101 (5) // 第三步: a = a ^ b // a = 0110 ^ 0101 = 0011 (3) // b = 0101 (5) // 最终结果: a=3, b=5 // 代码实现: a = a ^ b; // 第一步 b = a ^ b; // 第二步 a = a ^ b; // 第三步 // 或者写成一行: // a ^= b ^= a ^= b;按位运算符的优先级:从大到小
~ << >> & ^ |
2.程序调试方法
1.打印调试
程序运行过程中打印输出 printf(" num = %d",num);2.gdb调试
gnut提供的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 跟进函数
