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

是否有任何java内置方法来获取整数的奇偶校验?

是否有任何java内置方法来获取整数的奇偶校验?,java,bit-manipulation,Java,Bit Manipulation,我在上比特操作课。我发现了C++的内置函数,如:代码> 我得到了用于设置位和尾随零的所有可选java方法。对于奇偶性,我没有找到任何方法 我做了这样的事 int val = 0b100011; System.out.println(Integer.bitCount(val)%2==0?"Even":"ODD"); 有什么有效的方法可以做到这一点吗?没有内置的方法来获取整数的奇偶校验 我不知道你说的高效是什么意思,但就时间复杂性而言,你的解决方案是O(1) 另一种方法是使用类似于此的恒定时间复杂

我在上比特操作课。我发现了C++的内置函数,如:代码> 我得到了用于设置位和尾随零的所有可选java方法。对于奇偶性,我没有找到任何方法

我做了这样的事

int val = 0b100011;
System.out.println(Integer.bitCount(val)%2==0?"Even":"ODD");

有什么有效的方法可以做到这一点吗?

没有内置的方法来获取整数的奇偶校验

我不知道你说的高效是什么意思,但就时间复杂性而言,你的解决方案是
O(1)

另一种方法是使用类似于此的恒定时间复杂度(取自上面的链接,但也类似于本书):


您可以使用以下方法查找奇偶校验,因为没有内置函数来执行相同的操作。如果一个数包含奇数个1,则称其奇偶校验。否则,它被称为具有偶数平价

公共静态字符串findParity(int x){
布尔值isOdd=false;
而(x!=0){
isOdd=!isOdd;
x=x&(x-1);
} 
返回(isOdd)-“奇数”:“偶数”;
}

您也可以使用位集执行此操作。你也可以传递字符串

intv=292229202;
BitSet bs=BitSet.valueOf(新长[]{v
});
//位数设置为1。
System.out.println(bs.cardinality());
String s=“生存还是毁灭,这是个问题。”;
BitSet bs1=BitSet.valueOf(s.getBytes());
System.out.println(bs1.cardinality());
字符串奇偶校验=(bs1.cardinality()&1)==1?“奇数”:“偶数”;
然后是迭代的基本技术

int和=0;
对于(字节b:s.getBytes()){
而(b!=0){
总和+=(b&1);
b>>=1;
}
}
System.out.println((总和&1)==1?“奇数”
:“偶数”);

位集很棒,但它不支持所有的位操作功能,如移位和旋转。@AashishPawar True。但这不是你的要求。这解释了它为什么有效吗?是否因为最大32位,一个在16之后停止?我不认为这对超过32位的整数有效。
static boolean hasEvenParity(int x) 
{ 
    int y = x ^ (x >> 1); 
    y = y ^ (y >> 2); 
    y = y ^ (y >> 4); 
    y = y ^ (y >> 8); 
    y = y ^ (y >> 16); 

    // Rightmost bit of y holds the parity value 
    // if (y&1) is 1 then parity is odd else even 
    return (y & 1) == 0;
}