[Java] 190. Les bits binaires inversés --- les opérateurs & et | ne peuvent pas être utilisés au hasard! ! !

Inversez les bits binaires d'un entier non signé de 32 bits donné.

rapide:

Veuillez noter que dans certains langages (comme Java), il n'y a pas de type entier non signé. Dans ce cas, l'entrée et la sortie seront désignées comme des types entiers signés et ne devraient pas affecter votre implémentation, car la représentation binaire interne est la même, que l'entier soit signé ou non.
En Java, le compilateur utilise la notation du complément à deux pour représenter les entiers signés. Par conséquent, dans l'exemple 2 ci-dessus, l'entrée représente un entier signé -3 et la sortie représente un entier signé -1073741825.

Avancé:
Si vous appelez cette fonction plusieurs fois, comment allez-vous optimiser votre algorithme?

Exemple 1:

Entrée: 00000010100101000001111010011100
Sortie: 00111001011110000010100101000000
Explication: La chaîne binaire d'entrée 00000010100101000001111010011100 représente un entier non signé 43261596,
elle renvoie donc 964176192 et sa représentation binaire est 00111001011110000010100101000000.
Exemple 2:

Entrée: 11111111111111111111111111111101
Sortie: 101111111111111111111111111111
Explication: La chaîne binaire d'entrée 111111111111111111111111111101 représente un entier non signé 4294967293,
elle renvoie donc 3221225471 dont la représentation binaire est 101111111111.
Exemple 1:

Entrée: n = 00000010100101000001111010011100
Sortie: 964176192 (00111001011110000010100101000000)
Explication: La chaîne binaire d'entrée 00000010100101000001111010011100 représente un entier non signé 43261596,
elle renvoie donc 964176192, et sa représentation binaire est 001110010111000000.
Exemple 2:

Entrée: n = 11111111111111111111111111111101
Sortie: 3221225471 (10111111111111111111111111111111)
Explication: La chaîne binaire d'entrée 111111111111111111111111111101 représente un entier non signé 429496767293 (10111111111111111111111111111111) Explication: La chaîne binaire d'entrée 111111111111111111111111111101 représente un entier non signé 429496767293 (10111111111111111111111111111111) Explication: La chaîne binaire d'entrée 111111111111111111111111111101 représente un entier non signé 429496767293 (10111111111111111111111111111111) Explication: La chaîne binaire d'entrée 111111111111111111111111111101 représente un entier non signé 429496729293
(10111111111111111111111111111111).

rapide:

L'entrée est une chaîne binaire de longueur 32

代码1public static int reverseBits(int n) {
    
    
    	  int sum=0;
		  for(int i=0;i<32;i++) {
    
    
			  sum+=((n>>i)&1)<<(31-i);
		  }
    	  return sum; 
 }
代码2public static int reverseBits(int n) {
    
    
    	  int sum=0;
		  for(int i=0;i<32;i++) {
    
    
			  sum+=((n>>i)|0)<<(31-i);
			  
		  }
    	  return sum; 
}

Le cas du code 2 a des problèmes, donc si vous le voyez, vous pouvez aussi bien l'essayer! ! !

Je suppose que tu aimes

Origine blog.csdn.net/qq_44461217/article/details/115306267
conseillé
Classement