java: entender binario

[Descripción del título]
Hay 10 tipos de personas en el mundo, uno entiende el sistema binario, el otro no. Entonces, ¿sabe cuántos bits son diferentes en la representación binaria de dos enteros int32 myn?
【Ejemplo de entrada】:

1999 2299

[Ejemplo de salida]:

7

Idea: Al principio no entendía el significado de la pregunta, si la leo unas cuantas veces más, significa que los dos números binarios son diferentes.
Debido a que sabemos que dos números binarios son diferentes en un bit, cuando se les aplica XOR, ese bit será 1. Entonces, si puede saber con cuántos 1 resultados quieren, está bien.
Entonces se nos ocurrió una forma de encontrar varios 1 en un binario, que es usar la operación AND.

int func(int num){
  int temp=0;
  while(num!=0){
  temp++;
  num=num&(num-1);
}
/*
为什么while的条件是num不等于0,因为循环每次执行 num=num&(num-1),最终num会等于0的,num等于0,&运算就可以结束了。

 【举个栗子】:假设x=9,即1001;那么x-1=8,1000。
         1001     9
        &1000     8
        ———————
         1000     8
        &0111     7
        ———————
         0000
  执行了两次后num为0,所以9的二进制中有2个1,其他的例子也是一个意思    
*/
return temp;
}

Método 1:

//java
/**
     * 获得两个整形二进制表达位数不同的数量
     * 
     * @param m 整数m
     * @param n 整数n
     * @return 整型
     */
public class solution(int m,int n){
    
    
 int a=m^n;//异或
 int count=0;
 //求a中1的数量
 while(a>0){
 count++:
 a=a&(a-1); 
} 
}

Método 2:

Idea: O XOR, y luego el resultado de XOR es un AND con 1. La implementación específica es que el resultado del OR exclusivo se desplaza a la derecha en 1 bit cada vez que se realiza la operación AND.

//java
public class solution(int m,int n){
 int a=m^n;//异或
 int count=0;
 while(a!=0){
 /*
  如果某一位上&1等于1,那么证明某一位上就是1
 */
  if(a&1==1){
  count++;
  a>>=1;//右移
  }  
}
}

Método 3:

Idea: Compare myn bit a bit, si son iguales, el recuento será +1; implementación específica: primero compare los bits más bajos de los dos, luego cambie a la derecha y continúe comparando los bits más bajos de los dos hasta que se complete la comparación. ¿Cómo conseguir la posición más baja? Y 1 fase y.
1 y última fase, para conseguir su propia
fase previa 0 y obtener 0

public class solution(int m,int n){
  int len=32;//根据题意:两个int32整数m和n的二进制表达
  int count=0;
  while(len){
  int m_low=m&1;//取得m的最后一位
  int n_low=n&1
  if(m_low!=n_low){
  count++;
  m>>=1;
  n>>=1;
  len--;//往右移,所以长度要-1;
}
}
return count;
}

Supongo que te gusta

Origin blog.csdn.net/sinat_35803474/article/details/69935680
Recomendado
Clasificación