Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
位移位:如何在Java中将十进制值转换为位移位值_Java_Binary_Bit_Bit Shift - Fatal编程技术网

位移位:如何在Java中将十进制值转换为位移位值

位移位:如何在Java中将十进制值转换为位移位值,java,binary,bit,bit-shift,Java,Binary,Bit,Bit Shift,我有一个REST API,它提供十进制数形式的值,需要使用位移位运算符映射将它们转换为字符串: EXCEPT DISABLED 1 << 0 EXCEPT MOTO 1 << 1 EXCEPT LOADING 1 << 2 EXCEPT COMMERCIAL 1 << 3 除了DISABLED 1根据您在Kotlin中的等效代码,我假设我正确理解了问题: `va

我有一个REST API,它提供十进制数形式的值,需要使用位移位运算符映射将它们转换为字符串:

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

除了DISABLED 1根据您在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))
找到零的数目。或者,如果我们继续使用字符串方法,就不需要显式地计算零。而是

int zeros= binaryString.length()-1;
就够了

修订: 以上这些都有点不雅。我们得到了一个整数,它由0到28的任意整数左移1。我们应该能够在没有实数运算或字符串的情况下撤销它,只需向右移动,直到回到1。因为我们的数字都>0,所以我们可以使用>>>,不过>>(或/=2)也可以

如果给定的int是
给定的
,则以下内容将零的数量放入
计数中

int temp = given;
int count = 0;
    while (temp>1){
        count++;
        temp=temp>>>1;
    }

根据您在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))
找到零的数目。或者,如果我们继续使用字符串方法,就不需要显式地计算零。而是

int zeros= binaryString.length()-1;
就够了

修订: 以上这些都有点不雅。我们得到了一个整数,它由0到28的任意整数左移1。我们应该能够在没有实数运算或字符串的情况下撤销它,只需向右移动,直到回到1。因为我们的数字都>0,所以我们可以使用>>>,不过>>(或/=2)也可以

如果给定的int是
给定的
,则以下内容将零的数量放入
计数中

int temp = given;
int count = 0;
    while (temp>1){
        count++;
        temp=temp>>>1;
    }

我有一个想法,使用Integer.tobinarysting()转换为字符串位表示,然后计算零的数量,但这似乎是一个愚蠢的解决方案。我想知道是否有更好的方法。它总是一个1后面跟着那么多个0,还是看起来像11000,比如说?如果是前者,我之前的评论+长度会给你带来变化。如果不是的话,我可以写一些东西,如果有的话,在结尾计算0。如果是前者,那么log base 2也应该可以工作,所以我想我也有同样愚蠢的解决方案:)。可能有更圆滑的东西。另外,在你的例子中,我想我遗漏了一些东西,因为我数了18个零。(int)Math.round(Math.log(number)/Math.log(2.0))应该这样做。假设它总是一个1后跟n个0。如果它看起来像11后跟n个零,这就不行了。我有一个想法,使用Integer.tobinarysting()转换为字符串位表示,然后计算零的数量,但这似乎是一个愚蠢的解决方案。我想知道是否有更好的方法。它总是一个1后面跟着那么多个0,还是看起来像11000,比如说?如果是前者,我之前的评论+长度会给你带来变化。如果不是的话,我可以写一些东西,如果有的话,在结尾计算0。如果是前者,那么log base 2也应该可以工作,所以我想我也有同样愚蠢的解决方案:)。可能有更圆滑的东西。另外,在你的例子中,我想我遗漏了一些东西,因为我数了18个零。(int)Math.round(Math.log(number)/Math.log(2.0))应该这样做。假设它总是一个1后跟n个0。如果它看起来像11后面跟着n个零,这就不行了。