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