关于 C语言的位处理、位运算
位运算——强大到可怕
前言
在单片机开发中,使用C语言是大家首选。C语言是一种面向底层的语言,其中最为强大的便是,能够方便快捷的进行位运算,使得程序代码运行起来更加的有效率。
位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。
学习计算机的同学对二进制肯定不会陌生,二进制形式也就是能被机器直接识别的语言,直接使用位运算也就是二进制运算,减少了单片机对其的转换步骤,极大的提高了程序的运行效率。
位运算操作符号
- &
- 按位与
- 对应的二进制位 全为1时出1,否则为0(全一出一);
- |
- 按位或
- 对应的二进制位,只要有一个1时,输出1,否则为0 (有一出一);
- ^
- 按位异或
- 对应的二进制位,相同时出0,不同出1(不同为1);
- ~
- 取反
- 这是对可以对一个二进制的进行按位取反的操作,就是0变1,1变0;
- <<
- 左移
- 将数的二进制位整体左移N位,右补0;(操作数每左移一位,相当于该数乘以2。)
- >>
- 右移
- 将数的二进制位整体右移N位,移到的低位的舍弃,高位补0;(操作数每右移一位,相当于该数除以2。)
按位运算的基础操作
- 将数的二进制数据 第N位的值 置1
a &=~ ( 0x01<<N ); //将a二进制的 第N位 数据置1
- 将数的二进制数据 第N位的值 置0
a |= (0x01<<N); //将a二进制的 第N位 数据置0
-将数的二进制数据 第N位的值 翻转
a ^ = ( 0x01 << N ); //将a二进制的 第N位 数据翻转
- 将数的二进制数据 第N位的值 取出
( a & (0x01<<N) ); //取出a二进制的 第N位的数据
- 将数的二进制数据的 第N位的值 与其他二进制的值进行比较
不同时出 1 相同时出 0
if( ( a & (0x01<<N) ) ^ ( b & (0x01<<N) ) //将两个数据 的第N位进行比较
{
}
结束语
位运算的强大远远不止这些,有许多奇怪以及高级的用法,有待我们进行更深的探索。