为一个愚蠢的问题表示歉意。我有一个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编写这样的函数?请帮助在位世界中导航!
感谢救援!
根据您在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))
查找零的数量。