Le binaire et les puissances pour les pro

Le binaire et les puissances pour les pro - C - Programmation

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

Reply

Marsh Posté le 30-10-2004 à 09:49:05   

Reply

Marsh Posté le 30-10-2004 à 09:58:11    

t'as pas initialisé i.

Reply

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]

Reply

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.

Reply

Marsh Posté le 30-10-2004 à 11:13:30    

Code :
  1. while (i<k) 
  2. x&=0; 
  3. }


 
est une boucle infini. (edit: surtout dans le cas ou i est < à k avant la boucle, c-a-d quand n-k > 2 :o )
 
et x&=0; pour moi ça fait toujours zéro  :heink:


Message édité par pascal_ le 30-10-2004 à 11:15:14
Reply

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  [:whatde]


 
pourtant les warnings ils indiquent quand tu utilises une variable sans l'initialisée?

Reply

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]

Reply

Marsh Posté le 30-10-2004 à 12:29:32    

viewtiful2 a écrit :


(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


 
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

Reply

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.

Reply

Marsh Posté le 31-10-2004 à 14:46:44    

personne pour aider une fille en détresse?

Reply

Marsh Posté le 31-10-2004 à 14:46:44   

Reply

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) {
    return ((1<<(n-1)) - (1<<k));
}


Message édité par smaragdus le 31-10-2004 à 15:56:31
Reply

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 | ?

Reply

Marsh Posté le 31-10-2004 à 17:42:13    

Je ne vois pas l'interet d'utiliser le & ou le |

Reply

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.

Reply

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.
 

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed