Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.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 - Fatal编程技术网

Java中的二进制数最低有效

Java中的二进制数最低有效,java,binary,Java,Binary,我试图写一个方法,返回0到255(包括0到255)之间任何数字的至少2个有效二进制数,它以十进制形式返回,显然我可以使用mod运算符%,但我不知道该怎么做,因为这个方法不能返回正确的2个最小sig。对于19,它应该返回3,因为最后2个有效值(11)在十进制中等于3 public static int getLeastSignificant2( int num ) { int first = num<<6 int finalD = first>>>

我试图写一个方法,返回0到255(包括0到255)之间任何数字的至少2个有效二进制数,它以十进制形式返回,显然我可以使用mod运算符%,但我不知道该怎么做,因为这个方法不能返回正确的2个最小sig。对于19,它应该返回3,因为最后2个有效值(11)在十进制中等于3

public static int getLeastSignificant2( int num )

{

    int first = num<<6

    int finalD = first>>>6;

    return finalD; 
}
public static int getLeastSignificant2(int num)
{
int first=num>6;
返回最终结果;
}

您应该能够将数字按位和3(二进制中的11)相加。这将使除2个最低有效位之外的所有其他位归零

public static int getLeastSignificant2(int num) {
    // return num & 3; // if you don't want to use a binary literal
    return num & 0b11;
}
这样我就得到了
System.out.println(getLeastSignificant2(19));//=>3

如果您想使用mod运算符,可以这样做。我认为编译器最终会将其转换为使用位and

public static int getLeastSignificant2(int num) {
    int modResult = num % 4;
    return modResult < 0 ? modResult + 4 : modResult;
}
public static int getLeastSignificant2(int num){
int modResult=num%4;
返回modResult<0?modResult+4:modResult;
}

编辑:修改为处理@dave_thompson_085所述的负数

是否有其他方法在不使用二进制文字的情况下处理负数?就像我想知道如何使用mod运算符%一样,因为他们告诉我使用它作为提示。非常感谢您的帮助。注意
n%powerof2
不是负值的低位(至少对于Java要求的两位补表示);对于这个Q(限制为0:255),这不是问题,但在其他情况下也可能是问题。对于这个问题,并且代码在当前形式下没有意义,我建议您重写它。