OVH Cloud OVH Cloud

Division de nombre entiers signés par non signés

65 réponses
Avatar
Yann Renard
Bonjour à tous,

avec le code suivant, je m'attends à obtenir "-1" comme résultat.

#include <stdio.h>

int main(int argc, char** argv)
{
unsigned long long b = 5;
signed long long a = -5;
signed long long c = a / b;
printf("%lli\n", c);
return 0;
}

Or j'obtiens 3689348814741910322. La plateforme que j'utilise pour faire
ce test est Ubuntu Linux Lucid Lynx sur architecture x86_64.

# uname -a
Linux cervelet 2.6.32-25-generic #44-Ubuntu SMP Fri Sep 17 20:05:27 UTC
2010 x86_64 GNU/Linux

# gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Compilé sans optimisation. Est ce que je me trompe ? Ou est ce GCC qui
fait des bétises ?

Merci d'avance,
Yann

10 réponses

3 4 5 6 7
Avatar
Michael Doubez
On 10 nov, 09:59, Marc Boyer wrote:
Le 09-11-2010, Gabriel Dos Reis a écrit :
> Marc Boyer writes:


[snip]
>| le choix des non-signés pour vectore::size_t,
> De plus il les a banni des règles JSF++.

   Je viens de voir. Je vois aussi qu'il fait référence à une c lasse
Array. J'imagine une sorte de truc proche des tableaux à la C, un peu
entre std::vector et std::valarray (mais je n'ai rien trouvé de plus
sur le sujet).



Cherche std::tr1::array. Ca doit être l'équivalent.

[snip]

  Au final, je ne sais toujours pas en quoi "je choix des unsigned dans la
STL est beaucoup plus compliqué que le simple constat le suggèrerait" .
  Je sais juste que BS trouve que ce fut une erreur. C'est déjà une
information, mais cela ne donne pas beaucoup de détails sur
la complexité de ce choix.



Ce qui veut bien dire que la question n'est pas si tranchée que ça;
j'ai vu des gens très content des contraintes que ça impose.

Personnellement, je trouve que c'est pénible qu'un non signé soit
utilisé vu que les index sont plus souvent utilisés en non-signé.

--
Michael
Avatar
Marc Boyer
Le 10-11-2010, Michael Doubez a écrit :
On 10 nov, 09:59, Marc Boyer wrote:
Le 09-11-2010, Gabriel Dos Reis a écrit :
> Marc Boyer writes:


[snip]
>| le choix des non-signés pour vectore::size_t,
> De plus il les a banni des règles JSF++.

   Je viens de voir. Je vois aussi qu'il fait référence à une classe
Array. J'imagine une sorte de truc proche des tableaux à la C, un peu
entre std::vector et std::valarray (mais je n'ai rien trouvé de plus
sur le sujet).



Cherche std::tr1::array. Ca doit être l'équivalent.



Sauf que std::tr1::array::size_type semble être un non signé,
(d'après n1745.pdf c'est même size_t), ce qui est le coeur
de cette discussion.

  Au final, je ne sais toujours pas en quoi "je choix des unsigned dans la
STL est beaucoup plus compliqué que le simple constat le suggèrerait".
  Je sais juste que BS trouve que ce fut une erreur. C'est déjà une
information, mais cela ne donne pas beaucoup de détails sur
la complexité de ce choix.



Ce qui veut bien dire que la question n'est pas si tranchée que ça;
j'ai vu des gens très content des contraintes que ça impose.



L'avis de BS a l'air tranché lui.

Personnellement, je trouve que c'est pénible qu'un non signé soit
utilisé vu que les index sont plus souvent utilisés en non-signé.



Mon point de vue personnel est que cela a des avantages et des
inconvénients, mais je suis incapable de juger de leurs importances
respectives.
Jusqu'il y a peu, je jugeais que si les gens du commités avaient
votés pour l'usage des non signés, ils devaient avoir de bonnes
raisons, une expérience plus grande que la mienne, et je me pliais
à cet usage.

L'avis tranche de BS m'invite à revoir ma position.
Après, vu que je suis une sorte de "croyant, non pratiquant" du C++,
c'est surtout pour ma culture que pour mon usage.

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Gabriel Dos Reis
Marc Boyer writes:

| Le 09-11-2010, Gabriel Dos Reis a écrit :
| > Marc Boyer writes:
| >
| >| >| Tu m'avais alléché avec deux phrases
| >| >| "voir les écris de BS à ce sujet." ("ce" se rapportant à l'usage de non
| >| >| signés dans les tailles de conteneur) et "je choix des unsigne d dans la
| >| >| STL est beaucoup plus compliqué que le simple constat le sugg èrerait".
| >| >|
| >| >| Au final, tu m'a montrés deux passages du TC++PL d'où i l ressort que BS
| >| >| juge qu'en général, il ne faut pas utiliser les non sign és pour autre
| >| >| chose que des champs de bit, et une autre où il signale les da ngers
| >| >| liés au choix de non signés pour vector::size_t, qu'on po urrait lire en
| >| >| creux comme une critique de ce choix.
| >| >
| >| > Ceux qui connaisent les écrits de BS et la façon dont il s 'exprime
| >| > ne liront pas en creux.
| >|
| >| D'ailleurs, en général, je viens sur fclc et fclc++ pour apprendre.
| >|
| >| Donc, maintenant que tu as suggéré que BS n'apprécia it pas
| >
| > Ce n'est pas just de la suggestion.
|
| Question d'interprétation de langue naturelle.

Il est danois, mais s'exprime très bien en Anglais, très poliment (donc
parfois indirectement sur ses opinions fermes.)

| Comme je ne connais pas bien les écrits de BS, et la façon dont il
| s'exprime, je ne pouvais pas conclure.

Bien sûr.

Cette position a l'avantage de permettre de mettre en doute toute
information qu'on n'a pas vérifiée soit même (et qu'on ne po urra pas de
toute façon, vu l'axiome de départ) et en même temps de faire
sembler d'être ouvert à de l'information extérieure.

[...]

| Je sais juste que BS trouve que ce fut une erreur.

et qu'il a perdu cette bataille.

-- Gaby
Avatar
Gabriel Dos Reis
Michael Doubez writes:

[...]

| Personnellement, je trouve que c'est pénible qu'un non signé so it
| utilisé vu que les index sont plus souvent utilisés en non-sign é.

Si tu luis poses la question, il te dira « utilise un entier signà © --
il utilise en général "int" »

-- Gaby
Avatar
Gabriel Dos Reis
Marc Boyer writes:

[...]

| Jusqu'il y a peu, je jugeais que si les gens du commités avaient
| votés pour l'usage des non signés, ils devaient avoir de bonnes
| raisons, une expérience plus grande que la mienne, et je me pliais
| à cet usage.

Un commentaire que j'ai eu cette semaine de quelqu'un très expéri menté
et très actif dans le comité :

devant deux alternatives, le comité choisira la plus complexe.

-- Gaby
Avatar
Jean-Marc Bourguet
Gabriel Dos Reis writes:

Un commentaire que j'ai eu cette semaine de quelqu'un très expérimenté
et très actif dans le comité :

devant deux alternatives, le comité choisira la plus complexe.



J'ai l'impression que c'est un optimiste.

A+

--
Jean-Marc
FAQ de fclc++: http://web.archive.org/web/*/http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Michael Doubez
On 11 nov, 01:54, Gabriel Dos Reis wrote:
Michael Doubez writes:

[...]

| Personnellement, je trouve que c'est pénible qu'un non signé soit
| utilisé vu que les index sont plus souvent utilisés en non-signé.

Si tu luis poses la question, il te dira « utilise un entier signé --
il utilise en général "int" »



C'est ce que je fait et donc mon compilateur me fait un warning quand
j'ai l'outrecuidance de comparer mon index vulgairement signé avec le
retour de size() - donc je caste size_t(i).

C'est pas que ce soit un vrai problème, c'est juste irritant.

--
Michael
Avatar
Gabriel Dos Reis
Jean-Marc Bourguet writes:

| Gabriel Dos Reis writes:
|
| > Un commentaire que j'ai eu cette semaine de quelqu'un très expà ©rimenté
| > et très actif dans le comité :
| >
| > devant deux alternatives, le comité choisira la plus complexe.
|
| J'ai l'impression que c'est un optimiste.

:-) :-)

-- Gaby
Avatar
Gabriel Dos Reis
Michael Doubez writes:

| On 11 nov, 01:54, Gabriel Dos Reis wrote:
| > Michael Doubez writes:
| >
| > [...]
| >
| > | Personnellement, je trouve que c'est pénible qu'un non signà © soit
| > | utilisé vu que les index sont plus souvent utilisés en non- signé.
| >
| > Si tu luis poses la question, il te dira « utilise un entier sign é --
| > il utilise en général "int" »
|
| C'est ce que je fait et donc mon compilateur me fait un warning quand
| j'ai l'outrecuidance de comparer mon index vulgairement signé avec le
| retour de size() - donc je caste size_t(i).
|
| C'est pas que ce soit un vrai problème, c'est juste irritant.

Je compatis. J'utilise un tel compilateur moi-même et je trouve
que « irritant » est poli :-/

Dans les ciconstances où j'utilise « int », j'ai une estimat ion
de la borne supérieure du nombre d'objets que je traite. J'évite d'utiliser
directement les containers de la bibliothèque standard dans
l'interface : j'implémente mes abstractions en terme de ces containers,
donc je retourne un « int » (en général, par l'interm édiaire d'une
fonction inline), donc le warning disparaît.

-- Gaby
Avatar
Marc Boyer
Le 11-11-2010, Gabriel Dos Reis a écrit :
Marc Boyer writes:
| Le 09-11-2010, Gabriel Dos Reis a écrit :
| > Marc Boyer writes:
| >
| >| >| Tu m'avais alléché avec deux phrases
| >| >| "voir les écris de BS à ce sujet." ("ce" se rapportant à l'usage de non
| >| >| signés dans les tailles de conteneur) et "je choix des unsigned dans la
| >| >| STL est beaucoup plus compliqué que le simple constat le suggèrerait".
| >| >|
| >| >| Au final, tu m'a montrés deux passages du TC++PL d'où il ressort que BS
| >| >| juge qu'en général, il ne faut pas utiliser les non signés pour autre
| >| >| chose que des champs de bit, et une autre où il signale les dangers
| >| >| liés au choix de non signés pour vector::size_t, qu'on pourrait lire en
| >| >| creux comme une critique de ce choix.
| >| >
| >| > Ceux qui connaisent les écrits de BS et la façon dont il s'exprime
| >| > ne liront pas en creux.
| >|
| >| D'ailleurs, en général, je viens sur fclc et fclc++ pour apprendre.
| >|
| >| Donc, maintenant que tu as suggéré que BS n'appréciait pas
| >
| > Ce n'est pas just de la suggestion.
|
| Question d'interprétation de langue naturelle.

Il est danois, mais s'exprime très bien en Anglais, très poliment (donc
parfois indirectement sur ses opinions fermes.)



Je prends note.

| Comme je ne connais pas bien les écrits de BS, et la façon dont il
| s'exprime, je ne pouvais pas conclure.

Bien sûr.

Cette position a l'avantage de permettre de mettre en doute toute
information qu'on n'a pas vérifiée soit même (et qu'on ne pourra pas de
toute façon, vu l'axiome de départ) et en même temps de faire
sembler d'être ouvert à de l'information extérieure.



Peut-être. Cette position était surtout la négation de tes propres
premisses "Ceux qui connaisent les écrits de BS et la façon dont il
s'exprime". Si tu avais simplement dit une chose comme "Cela signifie
qu'il considère cela comme une erreur", ou "moi qui le côtoie, je pense
que...", je me serais moins méfié.

| Je sais juste que BS trouve que ce fut une erreur.

et qu'il a perdu cette bataille.



Ce qui signifie que, dès la proposition, il était contre ?
Ce n'est pas quelque chose qu'il a découvert "à l'usage" ?

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
3 4 5 6 7