首页 > 其他分享 >位运算的常见操作与好处

位运算的常见操作与好处

时间:2024-08-23 23:23:00浏览次数:10  
标签:运算 二进制 示例 int 常见 好处 按位 result

目录

位运算的具体操作

按位与 (&):

按位或 (|):

按位异或 (^):

按位取反 (~):

左移 (<<):

右移 (>>):

位运算的优势

位运算的具体操作

  1. 按位与 (&)

    • 操作:对两个操作数的每一位进行与操作,结果位仅在两个对应位都为1时为1。
    • 示例
      int a = 12;  // 二进制:00001100
      int b = 7;   // 二进制:00000111
      int result = a & b;  // 结果:00000100(即 4)
      
    • 用途
      • 用于清除某些位(将特定位设置为0)。
      • 实现掩码操作,用于检查特定位是否为1。
  2. 按位或 (|)

    • 操作:对两个操作数的每一位进行或操作,只要有一个对应位为1,结果位就为1。
    • 示例
      int a = 12;  // 二进制:00001100
      int b = 7;   // 二进制:00000111
      int result = a | b;  // 结果:00001111(即 15)
      
    • 用途
      • 用于设置某些位(将特定位设置为1)。
      • 实现标志位操作,用于组合多个标志位。
  3. 按位异或 (^)

    • 操作:对两个操作数的每一位进行异或操作,当两个对应位不同,结果位为1;相同则为0。
    • 示例
      int a = 12;  // 二进制:00001100
      int b = 7;   // 二进制:00000111
      int result = a ^ b;  // 结果:00001011(即 11)
      
    • 用途
      • 用于对数据进行加密或解密。
      • 实现位翻转,即将特定位从0变为1,或从1变为0。
  4. 按位取反 (~)

    • 操作:对操作数的每一位取反,即0变为1,1变为0。
    • 示例
      int a = 12;  // 二进制:00001100
      int result = ~a;  // 结果:11110011(即 -13,具体值取决于数据类型的位数)
      
    • 用途
      • 用于生成补码,通常用于负数表示。
      • 在某些算法中用于清除某些位。
  5. 左移 (<<)

    • 操作:将操作数的所有位向左移动指定的位数,右侧补0。
    • 示例
      int a = 3;   // 二进制:00000011
      int result = a << 2;  // 结果:00001100(即 12)
      
    • 用途
      • 用于快速乘以2的幂。
      • 计算数据的偏移量。
  6. 右移 (>>)

    • 操作:将操作数的所有位向右移动指定的位数,左侧根据符号位填充(对于有符号类型,填充符号位,对于无符号类型,填充0)。
    • 示例
      int a = 12;  // 二进制:00001100
      int result = a >> 2;  // 结果:00000011(即 3)
      
    • 用途
      • 用于快速除以2的幂。
      • 提取数据的某些部分。

位运算的优势

  1. 性能优化

    • 位运算比其他运算(如乘法和除法)更高效,因为它们直接操作硬件的底层位,通常只需要一个CPU指令即可完成。
    • 特别是在需要处理大量数据或实时计算时,位运算能够显著提高性能。
  2. 内存节省

    • 位运算可以用来压缩数据。例如,通过位掩码和位字段,可以在一个整数中存储多个布尔标志,从而节省内存。
    • 对于嵌入式系统和资源受限的环境,这种优化尤为重要。
  3. 底层编程和硬件接口

    • 位运算在底层编程(如驱动程序、操作系统开发)中非常重要,因为它们可以直接操作硬件寄存器和控制寄存器的特定位。
    • 通过位运算,可以高效地设置、清除和读取硬件状态。

标签:运算,二进制,示例,int,常见,好处,按位,result
From: https://blog.csdn.net/song0789/article/details/141476604

相关文章

  • 归一化常见的方法
    在机器学习和数据预处理中,归一化(Normalization)是一种重要的技术,用于调整数据尺度,使其更适合于后续的建模和分析。以下是三种常见的归一化方法,以及对它们的解释:###1.Log10归一化**Log10归一化**是将数据通过以10为底的对数变换进行缩放的方法。这种方法通常用于处理数据的范围差......
  • 线段树(2)——懒惰标记Lazy Tag(单运算)及例题
    上一篇文章我们讲了线段树的最基本的操作。如果有一种操作叫做区间加法呢?这个时候显然可以依次单点修改,但是时间复杂度太高了。所以可以考虑优化,由于思考过程可能很长,此处直接引入懒惰标记。懒惰标记就是在对一颗树的所有节点进行某种统一操作时,只对根节点做一个标记表示它的子树......
  • 常见核内核外并行机制
    广义来说并行分为俩种,提高单元效率是时域并行,一般是通过提高utilization,而增加单元数量则是空域并行。现代处理器中往往各种并行机制混合存在,本文旨对不同的并行机制分析归类。大部分并行机制都是针对俩个问题:1)解耦单元之间的依赖关系提高并行度[1],以及2)访存问题,后续并行机制大......
  • 运算符
    1:运算对常量和变量进行操作的过程称为运算。2:运算符对常量和变量进行操作的符号称为运算符3:操作数参与运算的数据称为操作数4:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的式子体现的是不同类型的表达式。注意事项:一个表达式最终......
  • D5 kubernetes 中pod资源常见字段及值类型(yaml)
    》pod资源包含许多配置字段,以提供更多的功能。以下是一些常见的配置字段和作用apiVersion:v1#api版本king:Pod#资源类型metadata:<Object>#资源元数据lables:......
  • 常见的通信名词
    1、单工,半双工,全双工 例如,在进行代码调试的时候,就可以只接一根线,将单片机发送的数据通过烧录工具传输给上位机。2、同步和异步    异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。    同步:发送方发出数据后,等接收方发回响应以......
  • Day06_0.1基础学习MATLAB学习小技巧总结(6)——矩阵运算篇
    利用暑假的时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。素材来源“数学建模清风”特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移......
  • 二进制运算
    二进制加法规则如下:一、基本运算规则0+0=0:两个二进制位都是0时,结果为0。例如,在二进制数1010和0101相加时,对应位上都是0的位,相加结果仍为0。0+1=1:当一个二进制位为0,另一个为1时,结果为1。比如在二进制数1100和0011相加时,对应位上一个为0一个为1的......
  • 第2章 数据的表示和运算
    概述数制与编码进位计数制及其相互转换;定点数的编码表示运算方法和运算电路基本运算部件:加法器;算术逻辑单元(ALU)加减运算:补码加/减运算器;标志位的生成乘/除运算:乘/除法运算的基本原理;乘法电路和除法电路的基本结构数制与编码进位计数制及其相互转换采用二进制编码的......
  • 运算论
    运算论优先级考虑变换优先级:线性变换(加减乘除)>非线性可逆变换(次幂)>不可逆有结合律变换(最值:max、min、gcd、lcm)>无结合律变换(求众数、中位数)量规避去max、min、gcd、lcm等不可逆变换,而将其转换为加减乘除等变换范围关系将一大部分进行操作可以转换为全局操作加上对另一小部分......