Q: calcular un número entero binario de 1 incluido
Consideración: El número de 1 binario se calcula, se examina en la aritmética binaria, los métodos de aplicación son:
- 1 proceso se moverá desde un mínimo en la parte superior, y los números enteros con (y, y) cuántas veces no es operación cero, durante el cual hay que muchos binario 1
- El número de ciclos, un número entero de ciclos n y (n-1), es binaria 1
- Uso función integrada de Java
A: código para:
@Test
public void main() {
int n=-5;
System.out.println(bitOneNumber(n));//31
System.out.println(Integer.bitCount(n));//31
System.out.println(bitOneNumberPro(n));//31
}
/**
* 通过循环的 n&(n-1)运算,得到n二进制中所有1的个数
* @param n
* @return
*/
private int bitOneNumberPro(int n) {
int count=0;
while (n!=0){
count++;
n=n&(n-1);
}
return count;
}
/**
* 通过位移运算,与(只能使用&)运算,来判断二进制位是否为1
* &(与):全真为真,相当于乘法 |(或):全假为假,相当于加法 ^(异或):同为0,异为1
* @param n
* @return
*/
private int bitOneNumber(int n) {
int count = 0;
int bit = 1;//用于去检测n的各个二进制位上的1
while (bit!=0){//当bit的最高1位被左移后,bit==0
if((bit&n)!=0){
count++;
}
bit=bit<<1;//将bit二进制中的1,不断的向左移动
}
return count;
}
Bit de computación relacionados
Y (Y, y): toda la verdad es cierto, el equivalente a la multiplicación
| (O, o): falsa completa es falsa, el equivalente a una adición
^ (Exclusivo o, xor): con 0, 1 iso
<< >>: a la izquierda, el operador de desplazamiento a la derecha, núm << 1, equivalente a num se multiplican, se divide por 2
<<<, >>>: sin firmar izquierda, derecha, ignorar el bit de signo, las vacantes se llenan de 0