java 位运算

来源:互联网 发布:台风灾害数据网址 编辑:程序博客网 时间:2024/06/08 11:04

左移、右移

左移      <<      低位补 0右移      >>      这是有符号右移。若值为正,则在高位插入0;若值为负,则在高位插入1。    >>>     则是无符号右移。无论正负,都在高位插入0。特点:    1、不溢出情况下,右移相当于除 2    2、不溢出情况下,左移相当于乘 2移位运算[速度]高于乘除运算

异或

两个相应位相同,则结果为0,否则为1。如下    10100001    ^    00010001    =    10110000总结    0 异或任何数 = 任何数         0^0=0        0^1=1    1 异或任何数 = 任何数取反         1^0=1        1^1=0特点:    1、可以用来使某些特定的位翻转。        如对数 10100001 的第2位和第3位翻转,可以将数与  00000110 进行按位异或运算。        10100001        ^        00000110        =        10100111        等价于 1010 0001 ^ 0x06    2、可以实现两个值的交换,而不必使用临时变量        a = 10100001        b = 00000110         交互 a、b 的值            a = a ^ b;  // a = 10100111             b = a ^ b;  // b = 10100001            a = a ^ b;  // a = 00000110    3、数 a 两次异或同一个数 b(a=a^b^b)仍然为原值a.

两个相应位只要出现了 1 结果就为 1,否则为 0。如下    1000 0001    |    0001 1011    =    1001 1011总结    0 或任何数(target目标位) = 任何数(target目标位)        0|0=0   --> 0 或 0 (该 0 表示的上述的任何数) 为 0        0|1=1   --> 0 或 1 (该 1 表示的上述的任何数) 为 1    1 或任何数 = 1        1|0=1        1|1=1特点:    1、可以用于指定设置某几位的值为 1        如设置 1100 1010 1010 0000 的第 4、9、11 为 1        1100 1010 1010 0000        |        0000 0101 0000 1000        =        1100 1111 1010 1000

两个相应位都为 1 结果就为 1,否则为 0。如下    1000 0001 1001 0010    &    0001 1011 1111 1111    =    0000 0001 1001 0001总结    1 与任何数(target目标位) = 任何数(target目标位)        1|0=0   --> 1 与 0 (该 0 表示的上述的任何数) 为 0        1|1=1   --> 1 与 1 (该 1 表示的上述的任何数) 为 1    0 与任何数(target目标位) = 0    总结一句话:当且仅当 1 与 1 才为 1,否则为 0特点:    1、可以用于指定设置某几位的值为 0        如设置 1110 0100 1010 1000 的第 6、8、11 为 0        1110 0100 1010 1000        &        1011 1111 0101 1111        =        1010 0111 0101 1000

操作符为 ~直接上例子    0000 0000 0000 0000 1000 0001    非操作结果为    1111 1111 1111 1111 0111 1110    0000 0000 0000 0000 0001 1011    非操作结果为    1111 1111 1111 1111 1110 0100总结    一元运算符,位取反。    1 非 --> 0    0 非 --> 1
原创粉丝点击