Hi, On 2018-09-27 17:34:54 -0700, Andres Freund wrote: > On 2018-09-27 20:18:12 -0400, Tom Lane wrote: > > > /* Handle +/- */ > > > if (dosign && adjust_sign((value < 0), forcesign, &signvalue); > > > uvalue = -(uint64) value; > > > else > > > uvalue = (uint64) value; > > > > Hm, what does -x mean for an unsigned value? I'm not really > > convinced this is conceptually better. > > 6.2.5 (9): "... A computation involving unsigned operands can never > overflow, because a result that cannot be represented by the resulting > unsigned integer type is reduced modulo the number that is one greater > than the largest value that can be represented by the resulting type." > > (unsigned)((int)-1) == 4294967295 > -(unsigned)4294967295 == 1 > > I think that's well defined.
I guess some might consider uvalue = (uint64) 0 - (uint64) value to be easier to reason about? Greetings, Andres Freund