本文只概述“<<”和“>>”其余可参考:
位运算总结(超全解释及代码演示)_南斋孤鹤的博客-CSDN博客
左移("<<"):
首先:我们要明白一件事:位移运算我们操作的对象是二进制数,也就是说位移运算是在二进制数上操作的;怎么证明呢?
下图是我在百度搜索的(足以够证明吧!!!):
"<<"的作用:
"<<"是用来将一个二进制数的各个二进制位全部左移若干位(右面补0)。那么这句话如何理解呢?下面例说明:
例1、"1<<2":首先我们要写出1的二进制数;1的二进制数就是00000001,各个二进制位左移两位后得到的二进制数就是00000100,100对应的十进制就是各个位置的数乘以他的权重,如下图:所以1<<2=4;

例2、"3<<2":首先我们要写出3的二进制数;3的二进制数就是00000011,各个二进制位左移两位后得到的二进制数就是00001100,1100对应的十进制就是各个位置的数乘以他的权重,如下图:所以3<<2=12;

总结:
我们从以上的步骤中,可以总结出,

技巧:左移1位相当于在该数乘以2,左移2位相当于该数乘以2*2
(绝大多数情况下可以这样快捷运算,)。
但是:
这个技巧并不是总是成立,例如:溢出
左移和右移运算过程中发生溢出,移位位数并不是可以任意。当移位位数超过该数值类型的最大位数时,编译器会用移位位数去模该类型位数,然后按照余数进行移位。
例如:左移溢出
{ int i=1; i=i<<33; System.out.println(i); } 结果: 2
讯享网
左移变量为33,变量i为32位,故左移位数实际为:33%32=1,也就是相当于移了一位,结果为2
右移(">>"):(注意符号)
">>"的作用:
上文我们明白了左移,呢么顾名思义右移就是向右移动两位,最左面补0了呗?
如果你这样认为呢就错了,你忽略了同一个十进制数的负值和正值的区别了!
注:右移时,对于无符号数左边高位补0;对于有符号数,若原来符号位为0(该数为正),则左边也补0。若符号位原来为1(即负数),则高位补1。

总结:
技巧:右移1位相当于除以2,右移n位相当于除以2的n次方。
同样这个技巧也是有特殊情况的,不过大多数情况下是可以这样认为的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/40758.html