黑马程序员技术交流社区
标题:
移位运算
[打印本页]
作者:
fengche
时间:
2013-10-19 21:31
标题:
移位运算
本帖最后由 杨增坤 于 2013-10-20 08:06 编辑
public class Shifty {
public static void main(String[] args) {
int i = 0;
while (-1 << i != 0)
i++;
System.out.println(i);
}
}
复制代码
常量-1是所有32位都被置位的int数值(0xffffffff)。左移操作符将0移入到由移位所空出的右边的最低位,因此表达式(-1 << i)将i最右边的位设置为0,并保持其余的32 - i位为1。很明显,这个循环将完成32次迭代,因为-1 << i对任何小于32的i来说都不等于0,实际上,它不会打印任何东西。求解
作者:
風諾
时间:
2013-10-19 21:46
刷贴王……
作者:
murder_fol
时间:
2013-10-19 22:00
测试了以下 -1<<32为还是变成了-1,-1<<33 为-2了,又开始重复了,和-1<<1,相等
不清楚是怎么处理的
作者:
卜弦
时间:
2013-10-19 22:21
本帖最后由 卜弦 于 2013-10-19 22:25 编辑
JAVA进行移位运算时因为int是占32位,进行移位的数是32的模,所以当<<的位数等于32的时候
就等于-1<<0,相当于没有进行移位.之后如果<<33或者大于33,将重复前面(0~32)的循环这是Java位移运算的特点。右移也是一样的道理。
作者:
回天之力
时间:
2013-10-20 00:17
class Demo
{
public static void main(String[] args)
{
int i=0,a;
int x=34;
while (x-->0)
{
a=-1<<i;
i++;
System.out.print(" "+a+" *");
}
}
}
//根据实验,当循环32次后,第一个字又是-1.所以这是个死循环。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2