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

144 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

左移位  <<

  格式:  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补位

        ~~~~00~~~~00 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 10~~~~01~~~~

           红色为删除的位数 蓝色为补齐的位数 丢弃补齐的位数由偏移量 (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

结束

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