Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
958 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  recuperer le signe d'une variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

recuperer le signe d'une variable

n°851658
europium
Ancien leader WormsHL
Posté le 16-09-2004 à 12:45:17  profilanswer
 

Salut,
 
Est ce que quelqu'un sait s'il y a moyen de recuperer le signe d'une variable ?
Pour etre exact, j'aimerais comparer le signe de plusieurs variables, et je voudrais savoir s'il est possible de le faire sans passer par une expression booleenne avec tous les cas...
 
merci  :bounce:


---------------
EurOPiUM, leader de WormsHL
mood
Publicité
Posté le 16-09-2004 à 12:45:17  profilanswer
 

n°851673
europium
Ancien leader WormsHL
Posté le 16-09-2004 à 13:09:03  profilanswer
 

ok je ne sais pas si ya directement une fonction pour ca, en tout cas c'etait tout bete....
 

Code :
  1. signe(a)==a/abs(a)


 
..........


---------------
EurOPiUM, leader de WormsHL
n°851678
jagstang
Pa Capona ಠ_ಠ
Posté le 16-09-2004 à 13:13:25  profilanswer
 

ben tu fais  
 
a - a  
 
si a est positif --> = 0
si a est négatif --> > 0

n°851705
Dartagnan0​9
Posté le 16-09-2004 à 13:56:33  profilanswer
 

hmmm,
 
essayons :)
 
a = 2
a - a = 0
cool :)
a = -2
a - a =
(-2) - (-2) =  
-2 + 2 =  
2 -2 = 0
hmmm :(  
 Je peut pas faire mieux pour t'aider JagStang....

n°851708
jagstang
Pa Capona ಠ_ಠ
Posté le 16-09-2004 à 14:00:00  profilanswer
 

pardon. j'ai sorti ça de tête, sans trop chercher.  
 
la formule est plutôt
 
a - abs(a)
 
si a=3
3 - 3 = 0
 
a = -5
(-5) - abs(-5) = -5 -5 = -10
 
c'est pas tout à fait ce que j'avais dit. mais on arrive quand même à qqch...
 
sorry en tout cas

n°851711
cricri_
Posté le 16-09-2004 à 14:03:38  profilanswer
 

Nan mais c'est pas un peu compliqué tout ça ??  
 

Code :
  1. bool bNegatif = a < 0;

n°851713
jagstang
Pa Capona ಠ_ಠ
Posté le 16-09-2004 à 14:05:03  profilanswer
 

ça doit être la fatigue
 
[:neowen]

n°851714
skeye
Posté le 16-09-2004 à 14:08:56  profilanswer
 

[:rofl]


---------------
Can't buy what I want because it's free -
n°851884
europium
Ancien leader WormsHL
Posté le 16-09-2004 à 16:51:21  profilanswer
 

cricri_ a écrit :

Nan mais c'est pas un peu compliqué tout ça ??  
 

Code :
  1. bool bNegatif = a < 0;




 
ouaip merci, justement c'est ce que je veux eviter ... j'ai enormement de variables a tester et... je suis feignant, jvoulais faire autrement!
me disais aussi qu'il y avait peut etre un hack du genre regarder la variable en binaire, et si son premier chiffre est '1' alors il est negatif !???? vrai ou pas ?


---------------
EurOPiUM, leader de WormsHL
n°851886
skeye
Posté le 16-09-2004 à 16:53:11  profilanswer
 

europium a écrit :

ouaip merci, justement c'est ce que je veux eviter ... j'ai enormement de variables a tester et... je suis feignant, jvoulais faire autrement!
me disais aussi qu'il y avait peut etre un hack du genre regarder la variable en binaire, et si son premier chiffre est '1' alors il est negatif !???? vrai ou pas ?


Tu veux éviter de tester si ta variable est inférieure à 0 ou non et tu parles de regarder sa valeur bit à bit? Et sinon, ça t'arrive d'être sobre? [:mlc]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 16-09-2004 à 16:53:11  profilanswer
 

n°851893
masklinn
í dag viðrar vel til loftárása
Posté le 16-09-2004 à 16:58:22  profilanswer
 

Ca... consiste en quoi... tes tests?
exactement
 
non parce que  

Code :
  1. if(a < 0)


ca marche achtement bien pour savoir si une variable est négative :o


Message édité par masklinn le 16-09-2004 à 16:59:28

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°851896
Taz
bisounours-codeur
Posté le 16-09-2004 à 17:01:12  profilanswer
 

c'est quoi le problème avec le signe < ?
 
 
vu comment t'as l'air dégourdi, je doute que ce test minable soit le point chaud de ton application : mais si tu veux faire une merde non portable, bien illisible, stupide plutot de faire ce qu'un gamin de 3 ans fait intuitivement ...

n°851899
masklinn
í dag viðrar vel til loftárása
Posté le 16-09-2004 à 17:05:42  profilanswer
 

Taz a écrit :

c'est quoi le problème avec le signe < ?
 
 
vu comment t'as l'air dégourdi, je doute que ce test minable soit le point chaud de ton application : mais si tu veux faire une merde non portable, bien illisible, stupide plutot de faire ce qu'un gamin de 3 ans fait intuitivement ...


 :love:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°851907
Taz
bisounours-codeur
Posté le 16-09-2004 à 17:10:04  profilanswer
 

seulement voilà, encore faudrait il avoir des petites de notion sur ce qu'est un compilateur et savoir ouvrir ses mirettes. Seulement voilà, magique, que tu écrives i < 0 ou bien i & 0xB0000000 (sur machine 32bits), le code objet est strictement le même

n°851930
europium
Ancien leader WormsHL
Posté le 16-09-2004 à 17:26:22  profilanswer
 

Taz a écrit :

c'est quoi le problème avec le signe < ?
 
 
vu comment t'as l'air dégourdi, je doute que ce test minable soit le point chaud de ton application : mais si tu veux faire une merde non portable, bien illisible, stupide plutot de faire ce qu'un gamin de 3 ans fait intuitivement ...


 
ok bonhomme, excuse moi de parler devant DIEU :hello:


---------------
EurOPiUM, leader de WormsHL
n°851935
chrisbk
-
Posté le 16-09-2004 à 17:29:10  profilanswer
 

ben test le bit 31 de tes entier, mais faut vraiment avoir que ca a faire

n°851955
Lam's
Profil: bas.
Posté le 16-09-2004 à 17:40:00  profilanswer
 

europium a écrit :

ok bonhomme, excuse moi de parler devant DIEU :hello:


 
Non, Dieu t'aurait aussi parlé de complément à 2 (ce qui n'est pas le cas de toutes les machines), et Dieu parlant couramment l'hexa, il aurait utilisé 0x80000000 plutôt que 0xB000000000. Mais Dieu ne répond à aucune questions de C++ ici, alors que Taz, oui.
 
Si on veux comparer que N nombres ont le même signe, je crois qu'on  peux faire ça, non ?

Code :
  1. unsigned int iMask = 0x8000000000;
  2. unsigned int iOr = 0;
  3. unsigned int iAnd = iMask;
  4. for (int i=0;i<nombres.size(); ++i)
  5. {
  6.   iOr  |= nombres[i];
  7.   iAnd &= nombres[i];
  8. }
  9. bool allSameSign = (iOr&iMask) == iAnd;
  10. }


n°851960
PtitKiki
Le Vrai
Posté le 16-09-2004 à 17:43:15  profilanswer
 

bon ben tu n'as qu'a te faire une fonction qui te retourne un booleen du genre :  
 
inline bool estPositif(int ton_entier) // strict ici
{
   // voir suivant tes besoins pour le cas == 0
   return (ton_entier > 0);
}
 
puisque tu veux eviter des cascades de if dans ton code.  
(si j'ai compris correctement ce que tu voulais faire, ce qui peut être faux aussi...)

n°851961
skeye
Posté le 16-09-2004 à 17:44:19  profilanswer
 

PtitKiKi a écrit :

bon ben tu n'as qu'a te faire une fonction qui te retourne un booleen du genre :  
 
inline bool estPositif(int ton_entier) // strict ici
{
   // voir suivant tes besoins pour le cas == 0
   return (ton_entier > 0);
}
 
puisque tu veux eviter des cascades de if dans ton code.  
(si j'ai compris correctement ce que tu voulais faire, ce qui peut être faux aussi...)


à part rajouter un appel de fonction l'intérêt est où? [:wam]


---------------
Can't buy what I want because it's free -
n°851970
europium
Ancien leader WormsHL
Posté le 16-09-2004 à 17:49:30  profilanswer
 

merci les gars  :)
prenez vous pas tant la tete sur ce pb à la con !
 
merci Lam's pour ton code, ca me plait, vais essayer de piger


---------------
EurOPiUM, leader de WormsHL
n°851971
chrisbk
-
Posté le 16-09-2004 à 17:49:45  profilanswer
 

skeye a écrit :

à part rajouter un appel de fonction l'intérêt est où? [:wam]


 
il l'a mis en inline :o

n°851977
PtitKiki
Le Vrai
Posté le 16-09-2004 à 17:51:53  profilanswer
 

il me semble qu'il voulait éviter d'ecrire systematiquement :
 
if(a > 0 || b < 0 && c > 0 ....)
 
et plutot avoir le résultat du test directement dans son expression "if"
 
maintenant j'ai peu etre mal compris la question...
jvois mal comment passer autrement que par un boolean pour répondre a la question "est-ce positif ?"
 
cf la question initiale :
 
"je voudrais savoir s'il est possible de le faire sans passer par une expression booleenne avec tous les cas... "
 

skeye a écrit :

à part rajouter un appel de fonction l'intérêt est où? [:wam]

n°851984
Taz
bisounours-codeur
Posté le 16-09-2004 à 17:57:54  profilanswer
 

chrisbk a écrit :

ben test le bit 31 de tes entier, mais faut vraiment avoir que ca a faire

ben ça produit le même code tu sais alors ...

n°851985
Lam's
Profil: bas.
Posté le 16-09-2004 à 17:57:56  profilanswer
 

Soit dit en passant, cette question est moins conne qu'elle n'en a l'air. Elle se rapporte au problème classique du : comment faire pour simplifier l'expression booléenne qui teste un ensemble de bits (le bit 31 de nos entiers dans le cas présent).
 
Et ça, les matrices de Karnaugh, elles savent faire ça très bien...
http://www.maxmon.com/kmaps1.htm
 
Mais ça commence à être un peu de l'artillerie lourde pour le problème en cours (surtout si on se met à écrire des fonctions inline pour remplacer les opérateurs du C  :lol: ).

n°852005
Joel F
Real men use unique_ptr
Posté le 16-09-2004 à 18:24:31  profilanswer
 

:| y a pas un issign ou chaiplus koi dans <limits> ou <algorithm> ?

n°852020
Lam's
Profil: bas.
Posté le 16-09-2004 à 18:35:07  profilanswer
 

Joel F a écrit :

:| y a pas un issign ou chaiplus koi dans <limits> ou <algorithm> ?


 
Yup. numeric_limits<T>::is_signed()
 

n°852021
masklinn
í dag viðrar vel til loftárása
Posté le 16-09-2004 à 18:35:18  profilanswer
 

Surtout qu'on sait toujours pas ce qu'il veut foutre avec ses variables et pourquoi var < 0 ne lui va pas


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°852263
el muchach​o
Comfortably Numb
Posté le 16-09-2004 à 23:48:44  profilanswer
 

Moi, quand j'ai besoin du signe, je fais un truc du genre :

Code :
  1. inline int signe(const double x)
  2. {
  3.   return (x < 0.) ? -1 : 1 ;
  4. }


 
Comme ça, par la suite, c'est facile de réassigner le signe par une bête multiplication, plutôt qu'en faisant un test sur un booléen dans lequel on stocke le signe.


Message édité par el muchacho le 16-09-2004 à 23:50:21
n°1945267
clercq
Posté le 27-11-2009 à 11:16:37  profilanswer
 

Bonjour,
 
Je bats mon record de remonté de discussion :), mais comme celle-ci avait l'air bien chaude :P.
Ma question est :
ne peut on pas récupéré la "posivité", "négativité" d'une variable en faisant :

Code :
  1. bool sign = maVar<<1 //BIGENDIAN


Code :
  1. bool sign = maVar<<17 //LITTLEENDIAN


 
PS : Je savais pas que Dieu parlait couramment l'hexa ... C'est vraiment pas un bit MDR (Désolé craquage :cry:).

n°1945273
theshockwa​ve
I work at a firm named Koslow
Posté le 27-11-2009 à 11:32:19  profilanswer
 

non, jamais


---------------
last.fm
n°1945288
clercq
Posté le 27-11-2009 à 11:57:04  profilanswer
 

Merci theshockwave. Au moins la réponse est clair ...
 
Entre mon post et la lecture de ta réponse, j'ai vu que je disais de la ...
 
Il faudrait en fait récupéré la valeur du dernier bit "tombé", soit le flag CF ... Mais je ne sais pas (encore) faire ...

n°1945330
theshockwa​ve
I work at a firm named Koslow
Posté le 27-11-2009 à 14:05:12  profilanswer
 

non, pas question de tester le carry pour ca. Comme ca a été dit plus haut, tu testes si ta valeur est inférieure à 0, les trucs de cowboy, ton compilateur sait très bien les faire. Même quand on cherche à avoir de bonnes perfs, on ne fait pas ce genre de choses parce que ca ne sert à rien. Qui plus est, little endian et big endian n'ont pas d'influence là-dessus à moins que tu saches que maVar n'est pas dans l'endianness de ta machine ce dont je doute fortement


---------------
last.fm
n°1945433
Joel F
Real men use unique_ptr
Posté le 27-11-2009 à 18:48:24  profilanswer
 

clairement c'ets le genre d'optimisation qui sert strictement à rien ..

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  recuperer le signe d'une variable

 

Sujets relatifs
Perte de variable de sessionvariable d'environnement LD_LIBRARY_PATH et Qt
[PHP] Notice: Undefined variable: xxx in yyy on line zzz[Perl] Passage de variable d'un script a un autre
ActionListener - recuperer un evenement[as]récupérer la date de la veille?
tester le contenu d'une variable[python] y'a moyen d'externaliser une variable ?
Pb de portée de variable sur fichiers includeRecuperer le contenu d'un fichier en variable
Plus de sujets relatifs à : recuperer le signe d'une variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR