Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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
Marc Boyer
Le 23-10-2010, Gabriel Dos Reis a écrit :
Marc Boyer writes:
| > Dans ce cas, tu enfonces une porte ouverte -- voir les écrits de BS
| > à ce sujet.
|
| Lesquels ?

celles que tu viens d'enfoncer :-)



Ton séjour aux US semble néfaste à ta vigilance grammaticale: lesquels,
masculins pluriel se référait aux écrits, pas à la porte.

| >| > (je choix des unsigned dans la STL est beacuoup plus compliqué que
| >| > le simple constat le suggèrerait.)
| >|
| >| Je suis preneur de tout pointeur, toute information, sur ce choix.
| >
| > Pointeurs vers des discussions orales ou internes du comité C++ ?
|
| S'il y en a, bien sûr.
|
| > Par contre, tu peux lire TC++PL3 pour voir ce qu'en pense l'auteur.
|
| Je ne trouve pas grand chose (mais je cherche peut-être mal).
| 16.3.4 dit juste des choses genre "ça permet une plus grande plage de
| valeur, mais ça peut provoquer des surprises".

quelle édition, quelle printing ?



Version française, dite "quatrième édition".

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:

[...]

| Ton séjour aux US semble néfaste à ta vigilance grammati cale:
^^^

Touché. Mais, serais-tu en train d'illustrer l'idée que rester cl oîtré
dans l'hexagone peut se revéler tout aussi atrophiant pour le cerveau ?

[...]

| > quelle édition, quelle printing ?
|
| Version française, dite "quatrième édition".

VO, page 73 :

The /unsigned/ integer types are ideal for uses that treat storage
as a bit array. Using /unsigned/ instead of an /int/ to gain one
more bit to represent positive integers is almost never a good idea.
Attempts to ensure that some values are positive by declaring
variables /unsigned/ will typically be defeated by the implicit
conversion rules [...]

page 448 :
[...] This allows a greater range of vector sizes on some
architecture. However, it can also lead to surprises. [...]
In the call f(-1), -1 is converted into a (rather large) positive
integer (§C.6.3). If we are lucky, the compiler will find a way of
complaining.

-- Gaby
Avatar
Marc Boyer
Le 29-10-2010, Gabriel Dos Reis a écrit :
Marc Boyer writes:

| Ton séjour aux US semble néfaste à ta vigilance grammaticale:

Touché. Mais, serais-tu en train d'illustrer l'idée que rester cloîtré
dans l'hexagone peut se revéler tout aussi atrophiant pour le cerveau ?



Il ne me semble pas que l'état de mon cerveau soit pire qu'il y a
quelques années. Nos échanges Usenet me semblent toujours se dérouler
suivant les mêmes modalités (à la différence que mon niveau de C
a pas mal augmenté par rapport au début des années 2000, et que tu
me sembles plus indulgent avec les débutants).

| Version française, dite "quatrième édition".

VO, page 73 :

The /unsigned/ integer types are ideal for uses that treat storage
as a bit array. Using /unsigned/ instead of an /int/ to gain one
more bit to represent positive integers is almost never a good idea.
Attempts to ensure that some values are positive by declaring
variables /unsigned/ will typically be defeated by the implicit
conversion rules [...]



Ok, c'est globalement ce qui est dit dans la discussion il me semble.
(personnellement, j'avais un avis contraire il y a quelques année,
mais je me suis rangé à ce point de vue).

page 448 :
[...] This allows a greater range of vector sizes on some
architecture. However, it can also lead to surprises. [...]
In the call f(-1), -1 is converted into a (rather large) positive
integer (§C.6.3). If we are lucky, the compiler will find a way of
complaining.



Oui, c'est ce que j'avais trouvé dans la version française.

Reste un point à discuter: à partir du moment où la bibliothèque standard
(les familles str* et *alloc en C, les size_type en C++) utilisent
des non-signés, quelle stratégie d'usage dans le code utilisateur ?

Et historiquement, pourquoi les non-signés dans la STL ?

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 29-10-2010, Gabriel Dos Reis a écrit :
| > Marc Boyer writes:
| >
| >| Ton séjour aux US semble néfaste à ta vigilance gramm aticale:
| >
| > Touché. Mais, serais-tu en train d'illustrer l'idée que reste r cloîtré
| > dans l'hexagone peut se revéler tout aussi atrophiant pour le cerv eau ?
|
| Il ne me semble pas que l'état de mon cerveau soit pire qu'il y a
| quelques années.

Je présume que c'est ici que je devrais dire « I rest my case  » :-)

Je ne me prononçais sur l'état de ton cerveau, mais je soupç onne qu'en
passant à côté de ce que je disais, tu apportes de l'eau à   mon moulin.

[...]

| > page 448 :
| > [...] This allows a greater range of vector sizes on some
| > architecture. However, it can also lead to surprises. [...]
| > In the call f(-1), -1 is converted into a (rather large) positive
| > integer (§C.6.3). If we are lucky, the compiler will find a wa y of
| > complaining.
|
| Oui, c'est ce que j'avais trouvé dans la version française.
|
| Reste un point à discuter: à partir du moment où la bibl iothèque standard
| (les familles str* et *alloc en C, les size_type en C++) utilisent
| des non-signés, quelle stratégie d'usage dans le code utilisate ur ?

Personnellement, j'utilise un entier signé -- je passe à un entier
non-signé uniquement si c'est requit par le code ou la circumstance
(e.g. mon manager dit que c'est qu'on doit faire, ou les règles locales
disent que c'est ce qu'on doit faire pour le projet.)

| Et historiquement, pourquoi les non-signés dans la STL ?

parce la comité a voté ainsi.

-- Gaby
Avatar
Gabriel Dos Reis
Marc Boyer writes:

| Le 29-10-2010, Gabriel Dos Reis a écrit :
| > Marc Boyer writes:
| >
| >| Ton séjour aux US semble néfaste à ta vigilance gramm aticale:
| >
| > Touché. Mais, serais-tu en train d'illustrer l'idée que reste r cloîtré
| > dans l'hexagone peut se revéler tout aussi atrophiant pour le cerv eau ?
|
| Il ne me semble pas que l'état de mon cerveau soit pire qu'il y a
| quelques années.

Je présume que c'est ici que je devrais dire « I rest my case  » :-)

Je ne me prononçais pas sur l'état de ton cerveau, mais je soup çonne qu'en
passant à côté de ce que je disais, tu apportes de l'eau à   mon moulin.

[...]

| > page 448 :
| > [...] This allows a greater range of vector sizes on some
| > architecture. However, it can also lead to surprises. [...]
| > In the call f(-1), -1 is converted into a (rather large) positive
| > integer (§C.6.3). If we are lucky, the compiler will find a wa y of
| > complaining.
|
| Oui, c'est ce que j'avais trouvé dans la version française.
|
| Reste un point à discuter: à partir du moment où la bibl iothèque standard
| (les familles str* et *alloc en C, les size_type en C++) utilisent
| des non-signés, quelle stratégie d'usage dans le code utilisate ur ?

Personnellement, j'utilise un entier signé -- je passe à un entier
non-signé uniquement si c'est requis par le code ou la circonstance
(e.g. mon manager dit que c'est qu'on doit faire, ou les règles locales
disent que c'est ce qu'on doit faire pour le projet.)

| Et historiquement, pourquoi les non-signés dans la STL ?

parce que la comité a voté ainsi.

-- Gaby
Avatar
Marc Boyer
Le 03-11-2010, Gabriel Dos Reis a écrit :
Marc Boyer writes:

| Le 29-10-2010, Gabriel Dos Reis a écrit :
| > Marc Boyer writes:
| >
| >| Ton séjour aux US semble néfaste à ta vigilance grammaticale:
| >
| > Touché. Mais, serais-tu en train d'illustrer l'idée que rester cloîtré
| > dans l'hexagone peut se revéler tout aussi atrophiant pour le cerveau ?
|
| Il ne me semble pas que l'état de mon cerveau soit pire qu'il y a
| quelques années.

Je présume que c'est ici que je devrais dire « I rest my case » :-)

Je ne me prononçais pas sur l'état de ton cerveau, mais je soupçonne qu'en
passant à côté de ce que je disais, tu apportes de l'eau à mon moulin.



Assez parlé de moi, c'est hors-charte.

| > page 448 :
| > [...] This allows a greater range of vector sizes on some
| > architecture. However, it can also lead to surprises. [...]
| > In the call f(-1), -1 is converted into a (rather large) positive
| > integer (§C.6.3). If we are lucky, the compiler will find a way of
| > complaining.
|
| Oui, c'est ce que j'avais trouvé dans la version française.
|
| Reste un point à discuter: à partir du moment où la bibliothèque standard
| (les familles str* et *alloc en C, les size_type en C++) utilisent
| des non-signés, quelle stratégie d'usage dans le code utilisateur ?

Personnellement, j'utilise un entier signé -- je passe à un entier
non-signé uniquement si c'est requis par le code ou la circonstance
(e.g. mon manager dit que c'est qu'on doit faire, ou les règles locales
disent que c'est ce qu'on doit faire pour le projet.)



J'en prend note.

| Et historiquement, pourquoi les non-signés dans la STL ?

parce que la comité a voté ainsi.



Affirmation vraie, mais d'un intérêt limité.

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.

Rien de cela ne raconte grand chose sur la complexité du choix
des size_t. Différentes pages WEB (dont celle de Stepanov lui même)
disent que la STL fut pour Stepanov un point après 20 ans de réflexion.
J'imagine donc bien que ce choix de non signé fut pesé, pensé, etc.

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 03-11-2010, Gabriel Dos Reis a écrit :
| > Marc Boyer writes:
| >
| >| Le 29-10-2010, Gabriel Dos Reis a écrit :
| >| > Marc Boyer writes:
| >| >
| >| >| Ton séjour aux US semble néfaste à ta vigilance grammaticale:
| >| >
| >| > Touché. Mais, serais-tu en train d'illustrer l'idée que rester cloîtré
| >| > dans l'hexagone peut se revéler tout aussi atrophiant pour le cerveau ?
| >|
| >| Il ne me semble pas que l'état de mon cerveau soit pire qu'il y a
| >| quelques années.
| >
| > Je présume que c'est ici que je devrais dire « I rest my case » :-)
| >
| > Je ne me prononçais pas sur l'état de ton cerveau, mais je soupçonne qu'en
| > passant à côté de ce que je disais, tu apportes de l'eau à mon moulin.
|
| Assez parlé de moi, c'est hors-charte.

Oh.

[...]

| >| Et historiquement, pourquoi les non-signés dans la STL ?
| >
| > parce que la comité a voté ainsi.
|
| Affirmation vraie, mais d'un intérêt limité.

Tu aurais préférée soit fausse ?

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

-- Gaby
Avatar
Marc Boyer
Le 09-11-2010, Gabriel Dos Reis a écrit :
| >| Et historiquement, pourquoi les non-signés dans la STL ?
| >
| > parce que la comité a voté ainsi.
|
| Affirmation vraie, mais d'un intérêt limité.

Tu aurais préférée soit fausse ?



Que tu me dises des chsoes fasses sur le C++ aurait au
moins l'avantage de m'amuser.
Mais là, c'est juste du bruit.

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



Justement, si je pose les question, c'est que je ne sais pas.
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
le choix des non-signés pour vectore::size_t, as-tu des informations
à donner qui permettent d'éclairer ton "je choix des unsigned dans la
STL est beaucoup plus compliqué que le simple constat le suggèrerait" ?

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 :
| >| >| Et historiquement, pourquoi les non-signés dans la STL ?
| >| >
| >| > parce que la comité a voté ainsi.
| >|
| >| Affirmation vraie, mais d'un intérêt limité.
| >
| > Tu aurais préférée soit fausse ?
|
| Que tu me dises des chsoes fasses sur le C++ aurait au
| moins l'avantage de m'amuser.

Je ne savais pas que tu laisses amuser par si peu.

| Mais là, c'est juste du bruit.

Je dirais que cela dépend de ton récepteur.

| >| 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 d ans 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 r essort 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 dange rs
| >| liés au choix de non signés pour vector::size_t, qu'on pourr ait lire en
| >| creux comme une critique de ce choix.
| >
| > Ceux qui connaisent les écrits de BS et la façon dont il s'ex prime
| > ne liront pas en creux.
|
| Justement, si je pose les question, c'est que je ne sais pas.

J'ai deviné cela. C'est pour cela que j'ai produit les citations.

| D'ailleurs, en général, je viens sur fclc et fclc++ pour app rendre.
|
| Donc, maintenant que tu as suggéré que BS n'appréciait pas

Ce n'est pas just de la suggestion.

| le choix des non-signés pour vectore::size_t,

De plus il les a banni des règles JSF++.

| as-tu des informations
| à donner qui permettent d'éclairer ton "je choix des unsigned d ans la
| STL est beaucoup plus compliqué que le simple constat le suggèr erait" ?

La plupart des discussions ont eu lieu dans des meetings face-à-face.
À ta place, je ne regarderais pas le fait que BS se croit obligé de dire
aux gens d'éviter les unsigned et de les bannir de JSF++ comme juste d u bruit.
Mais, je ne suis pas à ta place et c'est l'ère du relativisme.

-- Gaby
Avatar
Marc Boyer
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. Comme je ne connais
pas bien les écrits de BS, et la façon dont il s'exprime, je ne
pouvais pas conclure.

| 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). Et j'imagine donc que sa taille est signée.

| as-tu des informations
| à donner qui permettent d'éclairer ton "je choix des unsigned dans la
| STL est beaucoup plus compliqué que le simple constat le suggèrerait" ?

La plupart des discussions ont eu lieu dans des meetings face-à-face.



Où je n'étais pas. D'où mon ignorance.

À ta place, je ne regarderais pas le fait que BS se croit obligé de dire
aux gens d'éviter les unsigned et de les bannir de JSF++ comme juste du bruit.



Ce que je considérais comme du bruit, c'est de le répondre "parce la comité a
voté ainsi" à la question "Et historiquement, pourquoi les non-signés dans
la STL ?".

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.

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