关于位运算符在学java的第二天有提到!今天详细的说一下我们亲爱的位运算符(呵呵?)
- ~ (位非)翻转操作数的每一位。
- & (位与)当且仅当两个操作数的某一位都非0时该位才为1 。
- | (位或)只要两个数字的某一位有一个非0时该位就为1。
- ^ (位异)两个数字的某一位不相同时改位为1。
- “<<”(位左移) 左数字按位左移右数字指定的数。
- “>>” (位右移)左数字按位右移左数字指定的数。
- “>>>”(位补零右移)左数字的值按右数字指定的位数向右移,移动得到的空位为零填补。
位运算的优先级
~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|
注意1:
在进行位运算时,需要注意以下几点。
(1)>>>和>>的区别是:在执行运算时,>>>运算符的操作数高位补0,而**>>运算符的操作数高位移入原来高位的值**。
(2)右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。
(3)若进行位逻辑运算的两个操作数的数据长度不相同,则返回值应该是数据长度较长的数据类型。
(4)按位异或可以不使用临时变量完成两个值的交换,也可以使某个整型数的特定位的值翻转。
(5)按位与运算可以用来屏蔽特定的位,也可以用来取某个数型数中某些特定的位。
(6)按位或运算可以用来对某个整型数的特定位的值置l。
注意2:
在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。
(1)正数的最高位为0,其余各位代表数值本身(二进制数)。
(2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。
补充
有使用网上的资源进行补充整合。
还是搜点视频看,不然看字是看不懂的,逻辑鬼才当我没说。