单片机双字节数乘法运算实验_位操作运算的奇技淫巧!(附源码)

  • Post author:
  • Post category:其他







位运算

百度百科如下:

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作




位操作的优势

  • 位运算是一种底层的运算,往往比我们普通的运算要快上许多许多
  • 位运算是最高效而且占用内存最少的算法操作,执行效率非常高
  • 位运算操作的是二进制数,会拥有一些二进制的特性,在实际问题可以方便运用
  • 位运算只需较低的空间需求
  • 位运算使用能使程序变得更加简洁和优美
  • 位运算可以表示一些状态集合




运算符号

下面的a和b都是整数类型,则:

含义 C语言
按位与 a & b
按位或 a | b
按位异或 a ^ b
按位取反 ~a
左移 a << b
带符号右移 a >> b
无符号右移




优先级

C语言中位运算符之间,按优先级顺序排列为

优先级 符号
1 ~
2 <>
3 &
4 ^
5 |
6 &=、^=、|=、<<=、>>=




概念简介以及技巧

本文会以C语言的交互环境来做代码演示

常见的二进制位的变换操作

d014e96db5d270180f30cb8323701846.png



and运算 &


  • 判断奇偶数

对于除0以外的任意数x,使用x&1==1作为逻辑判断即可

if (x&1==1)
{

}
  • 判断某个二进制位是否为1

比如第7位, 0x40转到二进制是0100 0000,代表第7位是1.

if (n&0x40)
{
//TODO:添加你要处理的代码
}
  • 字节读取
(x >>  0) & 0x000000ff	/* 获取第0个字节 */
(x >> 8) & 0x000000ff /* 获取第1个字节 */
(x >> 16) & 0x000000ff /* 获取第2个字节 */
(x >> 24) & 0x000000ff /* 获取第3个字节 */