Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #168574 > unrolled thread

Christmas Quiz 2022

Started byRoman P <invalid@example.com>
First post2022-12-18 20:00 +0000
Last post2022-12-21 12:02 +0100
Articles 5 on this page of 45 — 18 participants

Back to article view | Back to comp.lang.c


Contents

  Christmas Quiz 2022 Roman P <invalid@example.com> - 2022-12-18 20:00 +0000
    Re: Christmas Quiz 2022 Tony Oliver <guinness.tony@gmail.com> - 2022-12-18 13:18 -0800
      Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-18 16:48 -0800
      Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:18 -0800
        Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-19 19:39 -0800
      Re: Christmas Quiz 2022 Niles Rogoff <eternal-september@niles.xyz> - 2022-12-27 01:22 -0800
        Re: Christmas Quiz 2022 Öö Tiib <ootiib@hot.ee> - 2022-12-27 01:58 -0800
          Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-27 10:25 -0800
        Re: Christmas Quiz 2022 James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-12-27 05:07 -0500
          Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 16:06 +0000
            Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 17:42 +0000
            Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-27 13:53 -0800
      Re: Christmas Quiz 2022 Niles Rogoff <eternal-september@niles.xyz> - 2022-12-27 01:24 -0800
        Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 16:07 +0000
    Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-18 21:22 +0000
      Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-18 21:40 +0000
      Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:02 -0800
      Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:20 -0800
    Re: Christmas Quiz 2022 red floyd <no.spam.here@its.invalid> - 2022-12-18 13:36 -0800
    Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-18 13:48 -0800
      Re: Christmas Quiz 2022 Siri Cruise <chine.bleu@yahoo.com> - 2022-12-18 14:57 -0800
        Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-18 15:43 -0800
          Re: Christmas Quiz 2022 Lynn McGuire <lynnmcguire5@gmail.com> - 2022-12-19 23:40 -0600
        Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-20 14:01 -0800
    Re: Christmas Quiz 2022 Kaz Kylheku <864-117-4973@kylheku.com> - 2022-12-20 13:49 +0000
      Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-20 14:33 +0000
        Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 14:44 +0000
          Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-20 14:57 +0000
            Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 15:03 +0000
              Re: Christmas Quiz 2022 David Brown <david.brown@hesbynett.no> - 2022-12-20 16:32 +0100
              Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 15:41 +0000
                Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-20 10:22 -0800
                  Re: for() syntax (Was: Christmas Quiz 2022) Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 18:54 +0000
                    Re: for() syntax Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-20 12:08 -0800
                    Re: for() syntax (Was: Christmas Quiz 2022) Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:48 -0800
                  Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:25 -0800
                Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:24 -0800
                  Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-26 13:05 -0800
    Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 12:46 -0800
      Re: Christmas Quiz 2022 Paavo Helde <eesnimi@osa.pri.ee> - 2022-12-20 23:49 +0200
        Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 14:00 -0800
          Re: Christmas Quiz 2022 Paavo Helde <eesnimi@osa.pri.ee> - 2022-12-21 00:13 +0200
            Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 14:38 -0800
      Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 21:31 -0800
        Re: Christmas Quiz 2022 David Brown <david.brown@hesbynett.no> - 2022-12-21 12:02 +0100

Page 3 of 3 — ← Prev page 1 2 [3]


#168623

FromAndrey Tarasevich <andreytarasevich@hotmail.com>
Date2022-12-20 14:00 -0800
Message-ID<tntb9j$q06h$1@dont-email.me>
In reply to#168622
On 12/20/2022 1:49 PM, Paavo Helde wrote:
> 20.12.2022 22:46 Andrey Tarasevich kirjutas:
> 
>>> 4) What is the difference between x = y++; and x = ++y;?
>>
>> Quite possibly, none. There's no reason to believe this code has any 
>> observable behavior.
> 
> I guess he got you there. The value of x is observable. Too well-defined 
> question?

I don't know what you are trying to say by "the value of x is 
observable", but let me reiterate: there's no reason to believe this 
code has any observable behavior. (Feel free to look up the definition.) 
Let alone the fact that in C++ it has no specific semantics at all.

-- 
Best regards,
Andrey

[toc] | [prev] | [next] | [standalone]


#168625

FromPaavo Helde <eesnimi@osa.pri.ee>
Date2022-12-21 00:13 +0200
Message-ID<tntc2r$ptr7$2@dont-email.me>
In reply to#168623
21.12.2022 00:00 Andrey Tarasevich kirjutas:
> On 12/20/2022 1:49 PM, Paavo Helde wrote:
>> 20.12.2022 22:46 Andrey Tarasevich kirjutas:
>>
>>>> 4) What is the difference between x = y++; and x = ++y;?
>>>
>>> Quite possibly, none. There's no reason to believe this code has any 
>>> observable behavior.
>>
>> I guess he got you there. The value of x is observable. Too 
>> well-defined question?
> 
> I don't know what you are trying to say by "the value of x is 
> observable", but let me reiterate: there's no reason to believe this 
> code has any observable behavior. (Feel free to look up the definition.) 
> Let alone the fact that in C++ it has no specific semantics at all.

The questions were cross-posted to C so I'm assuming int.

#include <iostream>

void f1() {
	int y = 0;
	int x = y++;
	std::cout << "x = " << x << "\n";
}

void f2() {
	int y = 0;
	int x = ++y;
	std::cout << "x = " << x << "\n";
}

int main() {
	f1();
	f2();
}

Output:

x = 0
x = 1

Different enough?



[toc] | [prev] | [next] | [standalone]


#168626

FromAndrey Tarasevich <andreytarasevich@hotmail.com>
Date2022-12-20 14:38 -0800
Message-ID<tntdgj$q76c$1@dont-email.me>
In reply to#168625
On 12/20/2022 2:13 PM, Paavo Helde wrote:
> 21.12.2022 00:00 Andrey Tarasevich kirjutas:
>> On 12/20/2022 1:49 PM, Paavo Helde wrote:
>>> 20.12.2022 22:46 Andrey Tarasevich kirjutas:
>>>
>>>>> 4) What is the difference between x = y++; and x = ++y;?
>>>>
>>>> Quite possibly, none. There's no reason to believe this code has any 
>>>> observable behavior.
>>>
>>> I guess he got you there. The value of x is observable. Too 
>>> well-defined question?
>>
>> I don't know what you are trying to say by "the value of x is 
>> observable", but let me reiterate: there's no reason to believe this 
>> code has any observable behavior. (Feel free to look up the 
>> definition.) Let alone the fact that in C++ it has no specific 
>> semantics at all.
> 
> The questions were cross-posted to C so I'm assuming int.
> 
> #include <iostream>
> 
> void f1() {
>      int y = 0;
>      int x = y++;
>      std::cout << "x = " << x << "\n";
> }
> 
> void f2() {
>      int y = 0;
>      int x = ++y;
>      std::cout << "x = " << x << "\n";
> }
> 
> int main() {
>      f1();
>      f2();
> }
> 
> Output:
> 
> x = 0
> x = 1
> 
> Different enough?

Oh, yes. Quite different. But this is really an answer to a different 
question. Say

   What is the difference between

     int y = 0;
     int x = y++;
     std::cout << "x = " << x << "\n";

   and

     int y = 0;
     int x = ++y;
     std::cout << "x = " << x << "\n";

   ?

-- 
Best regards,
Andrey

[toc] | [prev] | [next] | [standalone]


#168627

FromAndrey Tarasevich <andreytarasevich@hotmail.com>
Date2022-12-20 21:31 -0800
Message-ID<tnu5oc$v3nu$1@dont-email.me>
In reply to#168620
On 12/20/2022 12:46 PM, Andrey Tarasevich wrote:
> On 12/18/2022 12:00 PM, Roman P wrote:
> 
>> 3) What happens when you overflow an int variable, that is, set it to a
>> value beyond its range?
> 
> "Set"? What does "set" mean in this context?
> 
> Behavior of variables in out-of-range situations depends critically on 
> _how_ you attempt to produce an out-of-range value in it. For example, 
> assignment is one thing, while side effect of `++` is a completely 
> different thing.
> 

... although here I'm probably trying to be too smart for my own good: 
there's no need for this kind of branching. In the end, side effects 
modify the variable value through assignment as well.

This means that trying to "set an int to a value beyond its range" 
results in a congruent value in C++ and in an implementation-defined 
value or a signal in C. Overflow-related undefined behaviors that can 
still occur in signed integer arithmetic are not relevant to this 
question, since they are not really related to "setting" a variable value.

One can still note though that trying to set an int variable to an 
overly large floating-point value results in UB. Although even here one 
can argue that the UB occurs as part of the conversion, which happens 
before the actual "setting".

-- 
Best regards,
Andrey

[toc] | [prev] | [next] | [standalone]


#168628

FromDavid Brown <david.brown@hesbynett.no>
Date2022-12-21 12:02 +0100
Message-ID<tnup4t$10r05$1@dont-email.me>
In reply to#168627
On 21/12/2022 06:31, Andrey Tarasevich wrote:
> On 12/20/2022 12:46 PM, Andrey Tarasevich wrote:
>> On 12/18/2022 12:00 PM, Roman P wrote:
>>
>>> 3) What happens when you overflow an int variable, that is, set it to a
>>> value beyond its range?
>>
>> "Set"? What does "set" mean in this context?
>>
>> Behavior of variables in out-of-range situations depends critically on 
>> _how_ you attempt to produce an out-of-range value in it. For example, 
>> assignment is one thing, while side effect of `++` is a completely 
>> different thing.
>>
> 
> ... although here I'm probably trying to be too smart for my own good: 

I think we are all trying to be "smart" here - whether we are being 
/too/ smart is an open question!

> there's no need for this kind of branching. In the end, side effects 
> modify the variable value through assignment as well.
> 
> This means that trying to "set an int to a value beyond its range" 
> results in a congruent value in C++ and in an implementation-defined 
> value or a signal in C. Overflow-related undefined behaviors that can 
> still occur in signed integer arithmetic are not relevant to this 
> question, since they are not really related to "setting" a variable value.
> 
> One can still note though that trying to set an int variable to an 
> overly large floating-point value results in UB. Although even here one 
> can argue that the UB occurs as part of the conversion, which happens 
> before the actual "setting".
> 

I think there are three things to consider here.  First, there is the 
issue of what the OP meant.  Then there are the two different ways to 
set the value of a variable.

Regarding the OP's intention - while this is speculation, I believe he 
was thinking of signed integer overflow in arithmetic expressions - 
overflow in the addition part of "x = a + b;" rather than in the 
assignment part.  And in that case, signed integer overflow is undefined 
behaviour in C and C++, and many compilers optimise on the assumption 
that it never happens.  (A few compilers, like "gcc -fwrapv", give it 
defined behaviour.)

Setting a variable explicitly (whether it be by initialisation, 
assignment, augmented assignment, or increment/decrement operator 
side-effects) is a matter of conversion.  For an integer type to an int, 
this is covered in 6.3.1.3.  If the value to be converted cannot be 
represented in the new type (int, in this case), "either the
result is implementation-defined or an implementation-defined signal is 
raised."  For almost all compilers, excluding sanitizers or special 
debug modes, this is done by two's complement wrapping.

Conversion from a floating point number that is out of range is 
undefined behaviour.


The other way to change a variable is using memcpy, a character pointer, 
or a union.  These methods affect the underlying representation 
directly, and do not operate on values - so "overflow" or "range" makes 
no sense.  You can get undefined behaviour later when the value is read, 
if it is a trap or otherwise does not represent a valid value of the 
type.  (You won't see that with integers, in real-world compilers - but 
you can see it if you set a _Bool variable to something other than 0 or 
1 using memcpy() or a char pointer.)

[toc] | [prev] | [standalone]


Page 3 of 3 — ← Prev page 1 2 [3]

Back to top | Article view | comp.lang.c


csiph-web