技巧:
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. |
相关推荐
opencv按位操作在网上看到的比较好的内容,跟官方原版有些出入
C++按位操作
在Java中,按位操作符用于对整数进行位级别的操作 按位与(&)操作符 按位或(|)操作符 按位异或(^)操作符 按位取反(~)操作符 左移()操作符 右移(>>)操作符
此头文件可使凌阳61单片机IO口按位操作,但要使用28个字节。
按位运算符允许按照位来操作整型变量。可以把按位运算符应用于任意signed和unsigned整型,包括char类型。但是,它们通常应用于不带符号的整型。 这些运算符的一个常见应用是在整型变量中使用单个的位存储信息。例如...
主要介绍了opencv中图像叠加/图像融合/按位操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
经常项目中用到的Java的位运算相关的方法,稍微整理了下 详细介绍可参考博客 http://longshaojian.iteye.com/admin/blogs/1946865 请多指教!
按位操作符有:* ~(一元非)* &(二元与)* (二元或)* ^(二元异或)* ~^, ^~(二元异或非) 这些操作符在输入操作数的对应位上按位操作,并产生向量结果。下表显示对于不同操作符按步操作的结果。 例如,假定,A...
。
。
Java的位操作符用来操作整数基本数据类型中的单个“比特”(bit),即代进制位。下面通过本文给大家分享Java的按位操作符,感兴趣的朋友一起看看吧
一、图像叠加:cv2.add res=cv2.add(img1, img2) 或者res=cv2.add(img1, 标量值) 参数说明: cv2.add将两个图片对应位置的像素的值相加,或者将每个像素的值加上一个标量值,大于255的像素值就设置成255。...
在MCU编程中,对非按位操作的寄存器或字节操作,最好只修改需要变化的位而保持其他位不变,这样需要修改位,进行按位操作。
用于按位操作的简单实用函数 安装 作为子模块 git submodule add https://github.com/matthewpalmer/bitutils.git 您可以手动复制bitutils.c和bitutils.h文件。 用法 有关更多文档,请参阅 。 int kth_bit_from_...
很棒的位 精选的按位操作和技巧列表维护者请随时整数设置第n位x | (1<<n xss=removed>> 1;v |= v >> 2;v |= v >> 4;v |= v >> 8;v |= v >> 16;v++;舍入/舍入一个数字n >> 05.7812 >> 0 // 5获取最大整数int ...
资料备份,VB基础操作,VB位操作。 C语言有移位运算符,移位很方便。 VB是高级语言,没有移位运算符,该工程就是VB中的移位函数。
按照要求实现20个函数(C语言)在 bits.c 中根据要求完成函数
js-bitwise-visualizer:一个简单的应用程序,用于可视化JavaScript中的按位操作
js代码-手写代码练习---按位操作 | ^ & >> <<