Le binaire et les puissances pour les pro - C - Programmation
Marsh Posté le 30-10-2004 à 10:06:25
Fatal comme erreur. J'ai mis une heure avant de la trouver quand je l'ai faite  ![[:whatde] [:whatde]](https://forum-images.hardware.fr/images/perso/whatde.gif) 
 
Marsh Posté le 30-10-2004 à 11:00:00
int puissbin(int n,int k) /*si l'ecart entre n et k >2 c mal*/ 
{  
int x=1,i=0;  
 while (i<n-2)  
 {  
 i++;  
 x<<=1;  
 }  
 while (i<k)  
 {  
 x&=0;  
 }  
return x;   
} 
 
EN mettant i a 0 ausi, sa marche pour l'exemple et quand n et k ont un écart <2. 
Marsh Posté le 30-10-2004 à 11:13:30
| Code : 
 | 
 
 
est une boucle infini. (edit: surtout dans le cas ou i est < à k avant la boucle, c-a-d quand n-k > 2  )
 ) 
 
et x&=0; pour moi ça fait toujours zéro  
Marsh Posté le 30-10-2004 à 11:34:43
| WhatDe a écrit : Fatal comme erreur. J'ai mis une heure avant de la trouver quand je l'ai faite   | 
 
 
pourtant les warnings ils indiquent quand tu utilises une variable sans l'initialisée?
Marsh Posté le 30-10-2004 à 12:22:18
| cris56 a écrit : pourtant les warnings ils indiquent quand tu utilises une variable sans l'initialisée?  | 
 
J'utilisais cc  ![[:airforceone] [:airforceone]](https://forum-images.hardware.fr/images/perso/airforceone.gif) 
 
Marsh Posté le 30-10-2004 à 12:29:32
| viewtiful2 a écrit :   | 
 
 
pour n=6 et k=3, j'applique ta formule et j'obtiens : 
2^(6-1) - 1 - (2^3 - 1) = 31-7 = 24 
 
Faudrait djà apprendre à compter... 
D'ailleurs, après simplification, ta formule devient 2^(n-1) - 2^k
Marsh Posté le 31-10-2004 à 13:36:59
(2^(n-1)-1)-(2^(k)-1)  
ex : pour n=6 et k=3 cela donne 2^5-1 - 2^3-1 = 15-7=8  
 
 
Juste une erreur, désolé CT n=5 et k=3. 
 
ça me di toujours pas comment résoudre l'algo. 
Marsh Posté le 31-10-2004 à 15:55:29
Voilà une fonction qui calcule en une ligne ta formule : 
 
 
| int puissbin(int n, int k) {  | 
Marsh Posté le 31-10-2004 à 17:39:18
ok merci, je suis contente!!! 
j'avais déja un début de réponse.  
serait il possible de modifier l'algo pour utiliser le & et le | ?
Marsh Posté le 31-10-2004 à 17:59:19
Juste pour avoir une fonction qui permet d'utiliser >> et << et | et & plutot que ( +, - , *, /). 
Sinon merci a toi, ça marche trés bien ta fonction ulta courte. 
Marsh Posté le 31-10-2004 à 18:01:44
Dans ce cas, ça aurait cool de préciser dans ton 1er message que seuls les opérateurs *logiques* (et non binaires) étaient autorisés. 
 
Marsh Posté le 31-10-2004 à 18:07:15
non non logique c : || et && et ! 
 
ce qu'il faut c les opérateurs de manipulation de bits : 
<< et >> et & et | et ^ et ~  
 
voilu
Marsh Posté le 30-10-2004 à 09:49:05
Bonjour j'aimerais une aide pour réaliser ceci :
il faudrait exprimer cette expression avec des opérateurs du binaire seulement :
(2^(n-1)-1)-(2^(k)-1)
ex : pour n=6 et k=3 cela donne 2^5-1 - 2^3-1 = 15-7=8
voici mon algo qui est correct juste pour l'exemple :
int puissbin(int n,int k) //si k>=n+1 ca brule
{
int x=1,i;
while (i<n-2)
{
i++;
x<<=1;
}
while (i<k)
{
x&=0;
}
return x;
}
ça marche pour quelques exemples c'est tout !
qu'elqu'un pourrais m'aider ?
MERCI