当前位置: 首页 > 面试题库 >

用Java长移位

路和悌
2023-03-14
问题内容

我确定这对任何人来说都是一件容易的事!

为什么在Java中代码像

   long one = 1 << 0;
   long thirty = 1 << 30;
   long thirtyOne = 1 << 31;
   long thirtyTwo = 1 << 32;

   System.out.println(one+" = "+Long.toBinaryString(1 << 0));
   System.out.println(thirty+" = "+Long.toBinaryString(1 << 30));
   System.out.println(thirtyOne+" = "+Long.toBinaryString(1 << 31));
   System.out.println(thirtyTwo+" = "+Long.toBinaryString(1 << 32));

打印

1 = 1
1073741824 = 1000000000000000000000000000000
-2147483648 = 1111111111111111111111111111111110000000000000000000000000000000
1 = 1

这对我来说没有意义。long是一个64位数字-而它看起来像int上面的一个。我知道bitshifted
bytes会进行int提升,但是在这种情况下我看不到发生了什么。

任何关于这里发生的事情的指针都将是很好的:)

谢谢

编辑 :感谢所有的答案-单击“提交”后,我意识到发生了什么,但是进入了readonly模式,我无法删除!非常感谢!


问题答案:

这是因为1是int文字,因此<<将其应用于整数。结果强制转换为long,但那时为时已晚。

如果您写1L << 32, 等等 ,那么一切都会好起来的。L用于表示long文字。



 类似资料:
  • 问题内容: 我目前正在尝试诊断应用程序中的缓慢内存泄漏。到目前为止,我掌握的事实如下。 我有4天运行该应用程序的堆转储。 该堆转储包含约800个WeakReference对象,这些对象指向保留40mb内存的对象(所有对象都是同一类型,出于这个问题的目的,我将其称为Foo)。 Eclipse内存分析工具显示,这些WeakReferences引用的每个Foo对象均未被其他任何对象引用。我的期望是,这应

  • 问题内容: 我在Ubuntu 12.04上使用Oracle Java 7.51,并尝试执行此操作 但是我期望结果是,因为^运算符在Java中是按位XOR。我看错了Java规范的哪一部分? 问题答案: 您需要在第一个整数文字的末尾添加一个: 否则,它是文字,而不是a (忽略前导零)。然后,运算符将第一个操作数值从0x80000001提升为a ,但是由于设置了符号位,因此提升的结果为0xFFFFFFF

  • 问题内容: 我试图创建一个Java方法move(),它将更改对象的位置(这是一个椭圆形)。我的椭圆有一个初始的x,y位置,所以我想通过从JComponent调用以下方法来沿Jframe移动它。 问题答案: 您在中使用x变量,但未在函数中声明它,因此java假定它是 因此您的代码如下所示: 您需要将其更改为: maxX和maxY应该具有x和y可以具有的最大值 注意-此代码在某些迭代过程中不会移动对象

  • 问题内容: 我正在使用A 存储密集的位向量。 我想实现一个将位右移1的操作,类似于on ints。 是否存在可将s 移位的库函数? 如果没有,还有没有比下面更好的方法了? 问题答案: 这应该够了吧: 它会为您提供与原始位相同的位集,但没有最低位。 编辑: 为了概括这一点,

  • 我正在制作这个程序,需要渲染彩色四分形。我正在使用VBOs为此。 这就是我如何存储顶点和颜色的数据: 以下是我在渲染时的调用: (注意im使用映射的vbos,这就是为什么没有实际的数据绑定): 我不能得到偏移和步幅是正确的,所以当我渲染时,我看到这个奇怪的工件…

  • 问题内容: 在MySql变量的上下文中,什么是Java long的等效项? 问题答案: 与Java一样,是8字节长的整数。