首页 > 解决方案 > Java 移位运算符对预保存值的工作方式与对直接值的工作方式不同

问题描述

解决问题后出现:

https://www.hackerrank.com/challenges/flipping-bits/problem?h_l=interview&playlist_slugs%5B%5D%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D%5B%5D=miscellaneous

我的解决方案是:

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,它似乎无法移动。

为什么给我一个不同的价值?

标签: javabit-manipulationbitwise-operatorsbit-shift

解决方案


这应该是一个相当容易的修复。
return (~0>>>32)&~n;: 零被解释为 type int
要告诉程序它的类型是long,请编写以下内容:
return (~0L>>>32)&~n;


推荐阅读