Re: What is your opinion about unsigned int u = -2 ?

Liste des GroupesRevenir à l c 
Sujet : Re: What is your opinion about unsigned int u = -2 ?
De : Keith.S.Thompson+u (at) *nospam* gmail.com (Keith Thompson)
Groupes : comp.lang.c
Date : 03. Aug 2024, 03:25:30
Autres entêtes
Organisation : None to speak of
Message-ID : <87h6c2fldh.fsf@nosuchdomain.example.com>
References : 1 2 3 4 5 6 7 8 9
User-Agent : Gnus/5.13 (Gnus v5.13)
Thiago Adams <thiago.adams@gmail.com> writes:
[...]
I am doing experiments with constexpr. What happens with overflow in
compile time? The answer is not so clear. Sometimes it does not
compile and sometimes it works as in runtime.

Your first example fails due to signed integer overflow.  Your second
example is well defined because there is no such thing as unsigned
integer overflow.

constexpr int i = 1073741823;
constexpr int i2 = i*3/3;  /*does not compile*/

The `constexpr` means that the initializer must be a constant
expression.  `i*3/3` is not a constant expression, because `i*3` is not
a constant expression, because its result is not in the range of
representable values for its type, violating the constraint in N3220
6.6p4.  (Assuming 32-bit int; if int is wider than 32 bits there's no
overflow and i2 is 1073741823 .)

But this compiles and outputs
>
#include <stdio.h>
>
int main()
{
    constexpr signed char i = -2;
    constexpr unsigned long long u = 0ull+i;
    printf("%ull", u); /*prints 4294967294*/
}

No, the printf has undefined behavior; it prints "4294967294ll" on my
system.  The format for unsigned long long is "%llu", not "%ull".  You
have a "%u" for unsigned int followed by a literal "ll".  It's probably
printing the low-order 32 bits of the 64-bit value.  (You should also
have a newline at the end of the output.)

Fixing that problem :

#include <stdio.h>
int main() {
    constexpr signed char i = -2;
    constexpr unsigned long long u = 0ull+i;
    printf("%llu\n", u); /*prints 4294967294*/
}

The output is "18446744073709551614" (assuming unsigned long long is 64
bits, which it is in every implementation I'm aware of).

There's no overflow.  `0ull` is of type `unsigned long`, value
zero.  `i` is of type `signed char`, value -2.  For the addition, the
usual arithmetic conversions cause the right operand to be converted
from signed char to unsigned long long, yielding ULLONG_MAX-2,
or 18446744073709551614, or 0xfffffffffffffffe .

--
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */

Date Sujet#  Auteur
31 Jul 24 * What is your opinion about unsigned int u = -2 ?56Thiago Adams
31 Jul 24 +* Re: What is your opinion about unsigned int u = -2 ?7Ben Bacarisse
11 Aug 24 i`* Re: What is your opinion about unsigned int u = -2 ?6Tim Rentsch
11 Aug 24 i `* Re: What is your opinion about unsigned int u = -2 ?5Vir Campestris
11 Aug 24 i  +- Re: What is your opinion about unsigned int u = -2 ?1Richard Damon
11 Aug 24 i  +* Re: What is your opinion about unsigned int u = -2 ?2James Kuyper
12 Aug 24 i  i`- Re: What is your opinion about unsigned int u = -2 ?1Vir Campestris
12 Aug 24 i  `- Re: What is your opinion about unsigned int u = -2 ?1Tim Rentsch
31 Jul 24 +- Re: What is your opinion about unsigned int u = -2 ?1James Kuyper
1 Aug 24 `* Re: What is your opinion about unsigned int u = -2 ?47Blue-Maned_Hawk
1 Aug 24  +* Re: What is your opinion about unsigned int u = -2 ?45Ben Bacarisse
2 Aug 24  i`* Re: What is your opinion about unsigned int u = -2 ?44Thiago Adams
2 Aug 24  i `* Re: What is your opinion about unsigned int u = -2 ?43Kenny McCormack
2 Aug 24  i  +* Re: What is your opinion about unsigned int u = -2 ?34Bart
2 Aug 24  i  i+- Re: What is your opinion about unsigned int u = -2 ?1Ben Bacarisse
2 Aug 24  i  i+* Re: What is your opinion about unsigned int u = -2 ?2Thiago Adams
2 Aug 24  i  ii`- Re: What is your opinion about unsigned int u = -2 ?1Thiago Adams
2 Aug 24  i  i+* Re: What is your opinion about unsigned int u = -2 ?29Keith Thompson
2 Aug 24  i  ii+* Re: What is your opinion about unsigned int u = -2 ?27James Kuyper
3 Aug 24  i  iii+* Re: What is your opinion about unsigned int u = -2 ?19Thiago Adams
3 Aug 24  i  iiii+* Re: What is your opinion about unsigned int u = -2 ?8Thiago Adams
3 Aug 24  i  iiiii`* Re: What is your opinion about unsigned int u = -2 ?7Keith Thompson
3 Aug 24  i  iiiii `* Re: What is your opinion about unsigned int u = -2 ?6Thiago Adams
3 Aug 24  i  iiiii  `* Re: What is your opinion about unsigned int u = -2 ?5Keith Thompson
3 Aug 24  i  iiiii   `* Re: What is your opinion about unsigned int u = -2 ?4Thiago Adams
4 Aug 24  i  iiiii    `* Re: What is your opinion about unsigned int u = -2 ?3Keith Thompson
4 Aug 24  i  iiiii     `* Re: What is your opinion about unsigned int u = -2 ?2Thiago Adams
4 Aug 24  i  iiiii      `- Re: What is your opinion about unsigned int u = -2 ?1Thiago Adams
3 Aug 24  i  iiii`* Re: What is your opinion about unsigned int u = -2 ?10Keith Thompson
3 Aug 24  i  iiii `* Re: What is your opinion about unsigned int u = -2 ?9Thiago Adams
3 Aug 24  i  iiii  `* Re: What is your opinion about unsigned int u = -2 ?8Keith Thompson
3 Aug 24  i  iiii   `* Re: What is your opinion about unsigned int u = -2 ?7Thiago Adams
3 Aug 24  i  iiii    `* Re: What is your opinion about unsigned int u = -2 ?6Keith Thompson
3 Aug 24  i  iiii     +* Re: What is your opinion about unsigned int u = -2 ?3David Brown
3 Aug 24  i  iiii     i`* Re: What is your opinion about unsigned int u = -2 ?2Thiago Adams
4 Aug 24  i  iiii     i `- Re: What is your opinion about unsigned int u = -2 ?1Keith Thompson
25 Aug 24  i  iiii     `* Re: What is your opinion about unsigned int u = -2 ?2dave thompson 2
25 Aug 24  i  iiii      `- Re: What is your opinion about unsigned int u = -2 ?1Keith Thompson
3 Aug 24  i  iii`* Re: What is your opinion about unsigned int u = -2 ?7David Brown
3 Aug 24  i  iii `* Re: What is your opinion about unsigned int u = -2 ?6Thiago Adams
3 Aug 24  i  iii  +* Re: What is your opinion about unsigned int u = -2 ?4Thiago Adams
4 Aug 24  i  iii  i`* Re: What is your opinion about unsigned int u = -2 ?3Keith Thompson
11 Aug 24  i  iii  i `* Re: What is your opinion about unsigned int u = -2 ?2Tim Rentsch
11 Aug 24  i  iii  i  `- Re: What is your opinion about unsigned int u = -2 ?1Keith Thompson
4 Aug 24  i  iii  `- Re: What is your opinion about unsigned int u = -2 ?1Keith Thompson
9 Aug 24  i  ii`- Re: What is your opinion about unsigned int u = -2 ?1Bonita Montero
3 Aug 24  i  i`- Re: What is your opinion about unsigned int u = -2 ?1David Brown
4 Aug 24  i  `* Re: What is your opinion about unsigned int u = -2 ?8Bonita Montero
8 Aug 24  i   `* Re: What is your opinion about unsigned int u = -2 ?7Lawrence D'Oliveiro
8 Aug 24  i    `* Re: What is your opinion about unsigned int u = -2 ?6David Brown
9 Aug 24  i     `* Re: What is your opinion about unsigned int u = -2 ?5Bonita Montero
9 Aug 24  i      `* Re: What is your opinion about unsigned int u = -2 ?4David Brown
9 Aug 24  i       +* Re: What is your opinion about unsigned int u = -2 ?2Bonita Montero
9 Aug 24  i       i`- Re: What is your opinion about unsigned int u = -2 ?1David Brown
10 Aug 24  i       `- Re: What is your opinion about unsigned int u = -2 ?1Richard Damon
4 Aug 24  `- Re: What is your opinion about unsigned int u = -2 ?1Bonita Montero

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal