Path: csiph.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c++ Subject: Re: two's complement idea Date: Mon, 27 Jan 2020 01:17:45 -0800 Organization: A noiseless patient Spider Lines: 18 Message-ID: <868slti7gm.fsf@linuxsc.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: reader02.eternal-september.org; posting-host="7c306968cf7022673062d49c54d79376"; logging-data="32427"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18S5aCEXycIAQKtVvt0bQTUG/fuoLRlRho=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:C366YkFvGnE35HaCmLmaAD9RWIo= sha1:U1PqiEH/Idl6dVOwXN3b76EUOwg= Xref: csiph.com comp.lang.c++:71616 "Alf P. Steinbach" writes: > On 22.01.2020 08:32, Bonita Montero wrote: > >> I recently had the problem that I wanted to have a constant which is >> size_t wide and where the highest bit is set. I simply solved it that >> way (I assume ptrdiff_t as wide as size_t, but this should be common >> today on all platforms): >> std::size_t const SIZE_T_MSB = std::numeric_limits::min(); >> A guarantee from the standard that signed values are 2's-complement >> woud be nice for that. > > C++20 will give you that guarantee. > > But e.g. `size_t(-1) - size_t(-1)/2` does the job with just C++98 > guarantees. Or just size_t(-1)/2+1.