java - Java 移位运算符对预保存值的工作方式与对直接值的工作方式不同
问题描述
解决问题后出现:
我的解决方案是:
static long flippingBits(long n) {
long l=0; //Have to pre-declare 0, Why?
return (~l>>>32)&~n;
}
但我想做的是直接在 return 语句中使用 0,而不是在“long l”之前声明它,如下所示:
static long flippingBits(long n) {
return (~0>>>32)&~n; //Using 0 directly don't works.
}
我也尝试过使用括号,但结果是一样的。经过测试,如果我直接输入 0,它似乎无法移动。
为什么给我一个不同的价值?
解决方案
这应该是一个相当容易的修复。
return (~0>>>32)&~n;
: 零被解释为 type int
。
要告诉程序它的类型是long
,请编写以下内容:
return (~0L>>>32)&~n;
推荐阅读
- javascript - 对单个数组中的两种类型的对象进行排序
- javascript - 添加到页面上的主屏幕弹出窗口 - 打开另一个 URL
- regex - 使用 bash 计算模式之间的行/字符
- javascript - 使用 AJAX 将变量发送到 PHP 并再次使用 AJAX 检索输出
- jwt - 为什么我得到的角色声明有时带有命名空间,有时却没有命名空间
- angular - Angular 材质列表项不适用于包含 delay() 的异步管道
- excel - 日期格式在excel vba中不起作用
- javascript - Java 的 Calendar.getInstance().getTime() 在 JavaScript 中的等价物
- azure - 在 Azure 逻辑应用程序中如何将 Cookie 发送到端点
- kubernetes - 如何删除 Cronjob 资源?