关于位处理、位运算

关于 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位进行比较
{

}

结束语

位运算的强大远远不止这些,有许多奇怪以及高级的用法,有待我们进行更深的探索。

猜你喜欢

转载自blog.csdn.net/qq_45531642/article/details/110528922