java - 设置长变量的第 40 位问题
问题描述
我正在玩 Java 中的位操作,但在设置Long
变量的第 40 位时遇到问题。当我这样做时,它只是回到第 8 位。所以,对我来说,这意味着它是 32 位(而不是 64 位)。但是,我的理解是Long
/long
在 Java 中是 2^64。我可能在这里遗漏了一些东西。
这是我在 code.sololearn.com 中一直在玩弄的测试代码
Long k = 256L;
Long x = Long.valueOf((1 << 40));
System.out.println(x);
上面的代码返回 256。
解决方案
1 << 40
是一个 int 表达式(并且将有效地导致1 << (40 % 32) = 1 << 8
,其计算结果为256
)。尝试使用1L << 40
.
这是一个Ideone demo.
推荐阅读
- c# - 如何将 MAPISendMail 与 gmail 一起使用
- python - 在树结构中运行 for 循环
- c# - 如何解决:Expression.Property(myNewExpression, "nameOfproperty") 中的 AmbiguousMatchException
- spring-boot - 在gradle环境中的Springboot web中将嵌入式Tomcat服务器端口更改为80是错误的,当80端口没有使用时。为什么?
- bash - 如何在 Bash 中测试文件或符号链接的存在,甚至是损坏的?
- javascript - 将2个数组转换为键值对象javascript
- java - 如何在 Spring 请求映射中接受多个可选参数,但一次只能接受一个?
- windows - 如何查看 MASM 指令(如 PROC、.SETFRAME)的结果。.PUSHREG
- java - 你能用Android Java写一个记录特定应用程序屏幕的应用程序吗?
- c - 检查输入是否是最大的 2 的补码整数