天天看点

Java: 有趣的运算符 ( 移位 & | ^ )

前置知识: 进制互转

如果还不了解请看往期博客:  传送

左移位  <<

  格式:  num << value

  意义:  将num左移value位置

  运算规则: 丢弃最高位, 0补最低位

  数学意义: 在数字没有溢出的前提下,对于正数和负数, 左移一位都相当于乘以2的1 次方,左移n位就相当于乘以2的n次方

  注意: 如果移进高阶位(31或63位), 那么该值将变为负值

  栗子:  3 << 2

      解: 先将10进制的3转化为2进制

           0000 0000 0000 0000 0000 0000 0000 0011

           将 2进制的数据丢弃2个最高位 在最低位用0补位

        0000 0000 0000 0000 0000 0000 0000 001100

          红色为删除的位数 蓝色为补齐的位数 丢弃补齐的位数由偏移量 (value)决定

          将处理的数据 (1100) 转化为10进制 (12)

          所以结果为 12

右移位 >>

  格式:  num >> value

  意义:  将num右移value位置

  运算规则: 丢弃最低位, 在最高位 正数用0, 负数用1 补位

  数学意义: 右移一位相当于除2,右移n位相当于除以2的n次方

  栗子:  9 >> 2

      解:  先将10进制的9转化为2进制

            0000 0000 0000 0000 0000 0000 0000 1001

            将二进制的数据丢弃2个最低位 在最高位 正数用0, 负数用1 补位

         000000 0000 0000 0000 0000 0000 0000 1001

           红色为删除的位数 蓝色为补齐的位数 丢弃补齐的位数由偏移量 (value)决定

           将处理的数据 (10) 转化为10进制 (2)

           所以结果为 2

无符号右移位  >>>

  格式:  num >>> value

  意义:  将num右移value位置

  运算规则: 丢弃最低为, 在最高位用0补位

  注意: 无符号右移运算符 >>> 只是对32位和64位的值有意义

  无符号右移 与 右移 的

      共同点是:

           都丢弃最低位

      不同点是:

           右移 在最高位 正数用0, 负数用1 补位

           无符号右移 在最高位用0补位 

& ,  ^ ,  | 的区别

   & 运算符: 都是1, 结果才是1

   ^ 运算符: 一个1一个0, 结果是1

   | 运算符: 只要有1, 结果是1

   栗子:  3 & 1      3 ^ 1        3 | 1

   解: 先将10进制的3和1 转化为2进制

        3:  0000 0000 0000 0000 0000 0000 0000 0011

        1:  0000 0000 0000 0000 0000 0000 0000 0001

       3 & 1 :   0000 0000 0000 0000 0000 0000 0000 0011

                    0000 0000 0000 0000 0000 0000 0000 0001

       结果:     0000 0000 0000 0000 0000 0000 0000 0001  =  1

       3 ^ 1 :   0000 0000 0000 0000 0000 0000 0000 0011

                    0000 0000 0000 0000 0000 0000 0000 0001

       结果:     0000 0000 0000 0000 0000 0000 0000 0010  =  2

       3 | 1 :   0000 0000 0000 0000 0000 0000 0000 0011

                   0000 0000 0000 0000 0000 0000 0000 0001

       结果:    0000 0000 0000 0000 0000 0000 0000 0011  =  3

结束

  这就是本期的运算符讲解  感觉有用就点个赞吧 如果有错误或更好的方法评论区请多多指出  相互学习共同进步