Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Dec 2008 01:31:12 -0800
From:      "Garrett Cooper" <yanefbsd@gmail.com>
To:        "Christoph Mallon" <christoph.mallon@gmx.de>
Cc:        Maksim Yevmenkin <maksim.yevmenkin@gmail.com>, FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   Re: RFC: small syscons and kbd patch
Message-ID:  <7d6fde3d0812050131p2e9ac761n1c76575d3a3f5792@mail.gmail.com>
In-Reply-To: <4938F036.4010600@gmx.de>
References:  <bb4a86c70812021701i621fdcfjb6a58a7f5cf781d5@mail.gmail.com> <7d6fde3d0812040324y3bf0901cy1f4a6d961362c314@mail.gmail.com> <bb4a86c70812040724w43ddec15yab72920d80d879d3@mail.gmail.com> <20081205072229.GE18652@hoeg.nl> <7d6fde3d0812050034y43a70ce8i49fbba92f9c8943b@mail.gmail.com> <7d6fde3d0812050035u6e3ea930o9e093830a8608444@mail.gmail.com> <20081205084441.GA29312@owl.midgard.homeip.net> <7d6fde3d0812050050l57684eebkf14f252d78b68ec0@mail.gmail.com> <4938F036.4010600@gmx.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Dec 5, 2008 at 1:11 AM, Christoph Mallon
<christoph.mallon@gmx.de> wrote:
> Garrett Cooper schrieb:
>>
>> (I feel like I'm getting off on a bikeshed topic, but...)
>>
>> 1. What dialect of C was it defined in? Is it still used in the
>> standard dialect (honestly, this is the first time I've ever seen it
>> before, but then again I am a younger generation user)?
>
> Dialect? The ! operator is plain vanilla standard C. It takes a scalar
> operand and returns 1, if it compares equal to 0, otherwise it returns 0.
> !!, i.e. two consecutive ! operators, is one of the oldest tricks in the
> book, right next to (a > b) - (a < b) for comparison functions and countless
> other idioms.
>
>> 3. What's the real loss of going to `? :', beyond maybe 3 extra
>> keystrokes if it's easier for folks who may not be as experienced to
>> read?
>
> I'd like my bikeshed grass green, please.
>
>        Christoph

If you really want to split hairs, ! only negates the logic value,
whereas ~ actually negates the bits. So technically, you're not
flipping 0 to make 1 and vice versa, but instead flipping 0 to make
non-zero, etc. There is a clear distinction in hardware.

The point was that !! isn't obvious at first glancing the C code. It's
important for code to be readable as well as functional (that's why we
have style(9)). Getting down to it I'd like to see what the compiler
optimizes each as, because I can see dumb compilers saying `!!'
translates to `not, bne => set, else set, continue', whereas `? :'
could be translated to `bne, set, else set, continue'; I'm sure gcc
has moved passed these really minute details.

Hopefully this helps shed more light on where I'm coming from.

-Garrett



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7d6fde3d0812050131p2e9ac761n1c76575d3a3f5792>