`
zhb8015
  • 浏览: 397761 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Spring Roo杂谈
浏览量:0
社区版块
存档分类
最新评论

按位操作

    博客分类:
  • J2SE
阅读更多
技巧:
A、0110+0110,相当于0110*2,也就是将0110左移1位 
B、0100*0011,0100等于4,0100*0011也就是将0011乘以4,一个数的与2^n相乘,相当于将这个数左移n位。于是,将0011左移2位得1100.
C、1101^(~1101),逐一比特分解这一操作。一个比特与对它取反的值做异或操作,结果总是一串1.因此a^(~a)的结果是1111.
D、1011 & (~0 << 2),类似x & (~0 << n)的操作会将x最右边的n位清零。~0就是一串1,左移n位后结果是一串1后跟上n个0。将这个数与x进行“按位与”的操作,相当于将x最右边的n位清零。
 上述问题结果:(1100,1100,1111,1000)
程序设计中,位操作运算符的一种。在c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。

  在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动 的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是 移动66次和移动2次得到的结果相同。
  三种移位运算符的移动规则和使用如下所示:
  l <<
  运算规则:
  按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
  语法格式:
  需要移位的数字 << 移位的次数
  例如: 3 << 2,则是将数字3左移2位
  计算过程:
  3 << 2
  首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12。
  数学意义:
  在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
  l >>
  运算规则:
  按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
  语法格式:
  需要移位的数字 >> 移位的次数
  例如11 >> 2,则是将数字11右移2位
  计算过程:
  11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010。转换为十进制是2。

  数学意义:
  右移一位相当于除2,右移n位相当于除以2的n次方。
  l >>>
  运算规则:
  按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
  其他结构和>>相似。
有的时候,你希望将一个数的二进制值向右或向左移位。执行左移时,在一个数的二进制形式中,所有位都向左移动由移位运算符右侧的操作数指定的位数。 移位后在右边留下的空位将由零来填充。右移位运算符的原理相似,只是朝相反的方向移位。然而,如果数是负数,那么在左侧填充的值就是1而不是0。两个移位 运算符是>>和<<,它们分别是右移位和左移位运算符。除此之外,还有复合移位和赋值运算符<<=和>& gt;=。

  来看看下面的例子。假定现在有一个int值-7,它的二进制形式为1111 1111 1111 1111 1111 1111 1111 1001。在代码清单3-36中,我们使-7右移2个位置。
代码清单3-36 使用右移位运算符
int x;x = (-7 >> 2); // 11111111111111111111111111111001 becomes// 11111111111111111111111111111110// Write out "x is -2."System.Console.WriteLine("x = {0}.", x);
输出3-17展示了代码清单3-36的结果。
输出3-17
x = -2.
分享到:
评论

相关推荐

    C++按位操作

    C++按位操作

    凌阳61单片机的IO口按位操作的头文件

    在凌阳61单片机中,对IO口的按位操作则更加灵活,可以单独控制每个引脚的状态,这对于实现复杂的硬件逻辑非常有帮助。 头文件是C语言编程中定义函数原型、常量和结构体等的关键文件,它们提供了程序设计的接口。...

    按位操作,按位运算符允许按照位来操作整型变量

    ### 按位操作及其应用 #### 一、按位运算符概述 按位运算符是一种专门用于操作整型变量的特殊运算符,它能够直接针对整数的每一位进行操作。这种运算符不仅可以应用于所有有符号(signed)和无符号(unsigned)...

    按位操作.pdf

    【按位操作】在计算机编程中,特别是在C++语言中,是一种对整型变量的位进行直接操作的技术。按位操作符允许我们逐位地处理一个整数,这对于存储和处理二进制状态标志或者在有限的空间内组合多个信息特别有用。这些...

    按位操作.docx

    总的来说,按位操作和移位运算符在处理二进制数据、节省内存和提高计算效率等方面具有重要作用,尤其是在处理底层系统编程和嵌入式系统时。然而,对于带符号整数的右移操作,需要注意不同编译器可能有不同的行为,...

    java 按位操作符的使用

    在Java中,按位操作符用于对整数进行位级别的操作 按位与(&)操作符 按位或(|)操作符 按位异或(^)操作符 按位取反(~)操作符 左移()操作符 右移(&gt;&gt;)操作符

    opencv中图像叠加/图像融合/按位操作的实现

    在OpenCV库中,图像处理是一项基础且重要的任务,其中包括图像叠加、图像融合以及按位操作等技术。这些方法在图像合成、图像增强以及视觉效果创造等方面有着广泛的应用。 一、图像叠加 图像叠加,也称为图像相加,...

    Java位操作工具类

    经常项目中用到的Java的位运算相关的方法,稍微整理了下 详细介绍可参考博客 http://longshaojian.iteye.com/admin/blogs/1946865 请多指教!

    详解Java的按位操作符

    详解Java的按位操作符 Java的按位操作符是指在Java语言中对整数基本数据类型中的单个“比特”(bit)进行操作的符号。这些操作符可以分为两大类:按位逻辑操作符和移位操作符。 按位逻辑操作符 按位逻辑操作符是指...

    按位操作符

    按位操作符是编程语言中一组特殊的运算符,它们对整型变量的二进制表示进行操作,而不是对数值本身进行运算。这些操作符在处理二进制数据、位掩码或者进行高效的位级逻辑运算时非常有用。下面将详细阐述几种常见的按...

    7.位操作

    位掩码是指一串二进制数字,通常用于通过按位操作来屏蔽或选择特定的位。位掩码的应用非常广泛,如网络编程中的子网掩码、图像处理中的颜色通道提取等。 #### 用途 - **读取**:通过位与操作,使用位掩码可以读取...

    按位操作更容易

    在编程领域,按位操作是一种基础且强大的技术,尤其在C++和其他低级语言中尤为重要。"按位操作更容易"这个标题暗示了我们要探讨的是如何通过某种方式或工具集简化理解并使用按位运算的过程。描述中的“一组模板”...

    简述单片机中按位操作

    在单片机编程中,按位操作是一种非常重要的技术,特别是在需要精确控制硬件资源和优化代码效率时。按位操作允许我们对寄存器或字节中的每一位进行独立的设置和清除,而不是整个字节或者寄存器。这样做可以极大地提高...

    c位操作.docx

    《C++按位操作符详解》 C++中的按位操作符是一种强大的工具,它允许开发者对整型变量的每一位进行单独操作。无论是signed(有符号)还是unsigned(无符号)整型,甚至是char类型,都可以应用这些操作符。它们在处理...

    c位操作.pdf

    《C位操作》这篇文档主要讨论的是C++中的按位操作符,特别是移位运算符在处理整型变量中的位信息时的应用。按位运算符允许我们对整型变量的每一位进行操作,常用于存储和处理二进制状态标志或者在有限的空间内存储多...

    c++ 位操作 总结

    C++位操作总结 C++位操作是C++语言中的一种基本操作,用于处理二进制数据的位操作。C++位操作可以使语义更加明确,减少了C语言位操作的晦涩性,功能更加强大。 传统的C语言方式的位操作 在C语言中,位操作是使用...

    opencv中图像叠加/图像融合/按位操作

    一、图像叠加:cv2.add res=cv2.add(img1, img2) 或者res=cv2.add(img1, 标量值) 参数说明: cv2.add将两个图片对应位置的像素的值相加,或者将每个像素的值加上一个标量值,大于255的像素值就设置成255。...

    js-bitwise-visualizer:一个简单的应用程序,用于可视化JavaScript中的按位操作

    它提供了丰富的内置功能,其中之一就是按位操作。按位操作符在处理二进制数据时非常有用,尤其是在优化性能或进行特定类型的数据处理时。`js-bitwise-visualizer`是一个专为理解JavaScript按位操作设计的工具,它...

Global site tag (gtag.js) - Google Analytics