我现在对Java左移操作有些困惑,
1<<31 = 0x80000000 --> this I can understand
但
1<<32 = 1 Why is this?
1<<33 = 2
看起来像是更多的偏移值,该值的模数为32。
感谢大家对JLS的答复和报价。
我只想知道更多。是否知道以这种方式进行设计的原因?还是只是一些约定?显然C没有这个怪癖?
感谢@paxdiablo。看起来C声明了未定义的行为。
我在这里有一些个人假设:
ARM体系结构参考手册A7.1.38
语法LSL Rd,Rm,#immed_5
哪里:
Rd 是存储操作结果的寄存器。
Rm 是包含要移位的值的寄存器。
immed_5 指定偏移量,范围为0到31。
在指令级别, immeidate immed_5
仅占用5位,以避免无意义的操作,从而节省了一些指令空间。我猜想高级语言只是将这个约定统一起来,以避免在编译指令时进行毫无意义的工作。
根据Java语言规范15.19. Shift Operators
(略作解释):
如果左侧操作数的提升类型为
int
,则 仅将右侧操作数的最低5位用作
移位距离。就像右手操作数受到&
掩码值0x1f
或的按位逻辑AND运算符一样0b11111
。实际使用的移位距离因此总是在范围0
到31
,包括端值。
这意味着(例如)33
作为6位二进制数100001
,00001
在使用前会减少为5位。因此x << 33
与相同x << 1
。
当试图从Hitbox API获取数据时,我得到了一个奇怪的结果。对于一个API的命令,这种情况每次都会发生,而对于另一个API的命令,这种情况只是有时发生。结果差不多是这样(这是我得到的最后一个结果): \U001F\B\0\0\0\0\0\U0003W8SμMU~S N T&N G6C$Z%9IGF[(\U0005\U000F(:6\U000F\B P C\U0015\N\U007F V\U00
我有一个程序可以读取两个文件(“incompleta.txt”和“completa.txt”),并比较两个文件中是否有相同的名称。其工作原理如下: 它将“completa.txt”中的所有名称存储在ArrayList中 问题是我的“lista.txt”看起来像这样:Image 第二条线完全是混乱和扭曲的。 我的Java代码:
我使用Oracle11g(在Red Hat上)。我有一个带有XMLType列的简单常规表: 我使用Oracle SQL Developer(在Windows上): 很管用。我只有一个牢房。我可以双击并下载整个XML文件。 然后我试图以CLOB的形式得到结果: 很管用。我只有一个牢房。我可以双击并看到整个文本和复制它。但有个问题。当我把它复制到剪贴板时,我只得到前4000个字符。似乎在4000位置有
所以看起来第一个被稍微回滚,可能是时区对应的两个小时?但为什么这种情况只发生在一个案子上呢?用2000年做同样的实验不会产生同样的错误。
问题内容: 我有这样的事情: 我希望它会在文本区域中显示“ hello 0”,等待1秒,然后显示“ hello 1”,然后等待1秒,依此类推。 但是发生的情况有所不同,它等待5秒钟,然后显示“ hello 4”。 任何想法? 问题答案: 是的-您基本上是在阻止UI线程,因此永远不会回避实际更新。 在UI线程中休眠是一个非常糟糕的主意。 如果您想执行类似的操作,则应使用。(我假设您正在使用Swing
我正在使用Weka Gui-Explorer,我想根据类{男性,女性}对我的数据进行分类。我使用MultiBoostAB分类器,以REPTree分类器为基础。我正在尝试使用训练集(557个实例)评估我的分类器的准确性 然后是一个具有大约300个属性的测试集(200个实例)。准确率83,5% - 167从200个实例中正确分类,kappa统计量为0,67。我保存了这个模型,并用它来预测 其他未知数据