Bitshifts:如何在Java中将小数转换为bitshift值

问题描述 投票:0回答:1

为一个愚蠢的问题表示歉意。我有一个REST API,它以十进制数形式提供值,需要使用位移位运算符映射将它们转换为字符串:

EXCEPT DISABLED           1 << 0
EXCEPT MOTO               1 << 1
EXCEPT LOADING            1 << 2
EXCEPT COMMERCIAL         1 << 3

最大位移最多可以达到28(1 << 28)。 API提供了一个数字,例如262144,我将其转换为二进制(1000000000000000000),然后推断出移位为17。但是,如何用Java编写这样的函数?请帮助在位世界中导航!

感谢救援!

java binary bit bit-shift
1个回答
0
投票

根据您在Kotlin中的等效代码,我假设我正确理解了问题:

`val shift = Integer.toBinaryString(number).count { it == '0' }`,

足以计算零,而不是尾随零。

我相信int足以满足您所拥有的范围。因此,您的想法是:

int given = 262144;
String binaryString = Integer.toBinaryString(given);

将起作用。

int zeros = binaryString.length() - binaryString.replaceAll("0", "").length();

将为您提供零,这就是您的答案。

但是,如果确实如此,并且实际上所有零都在尾随,似乎(尽管我不能确定)我们总是在看1,后跟n个零。要找到n,我们也可以这样做:

(int)Math.round(Math.log(given)/Math.log(2.0))

查找零的数量。

© www.soinside.com 2019 - 2024. All rights reserved.