是否有任何java内置方法来获取整数的奇偶校验?
我在上比特操作课。我发现了C++的内置函数,如:代码> 我得到了用于设置位和尾随零的所有可选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) 另一种方法是使用类似于此的恒定时间复杂
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;
}