From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,5697899e4423465c X-Google-Attributes: gid103376,public From: Keith Thompson Subject: Re: Boolean Representation Date: 1998/09/25 Message-ID: #1/1 X-Deja-AN: 394815505 Cache-Post-Path: wagasa.cts.com!kst@king.cts.com References: <6udkcj$87j$1@nnrp1.dejanews.com> <6uecer$3sf$1@nnrp1.dejanews.com> <6ug5l7$tsb$1@nnrp1.dejanews.com> Organization: CTS Network Services Newsgroups: comp.lang.ada Date: 1998-09-25T00:00:00+00:00 List-Id: dennison@telepath.com writes: > In article , > Keith Thompson wrote: [...] > > > > I don't believe even that much is guaranteed. A compiler I worked on > > used, for some targets, the representation (False => 0, True => -1) > > (i.e., a literal True value was represented with all bits set to 1 > > (2's-complement) rather than just the last bit set to 1). This made > > tests and logical operations more efficient, at the expense of some > > extra code for Boolean'Pos, Boolean'Val, "<", ">", etc. > > I suspect their claim would be: (False => 0, True => 2**32 - 1). > -- > T.E.D. No, no such claim is necessary. Also, this was an Ada-83 compiler with no unsigned types (and no integer types larger than 32 bits), so 2**32-1 wasn't even a legal value. False was represented as 0, True was represented as -1, and the compiler generated extra code where necessary to ensure that all the language-defined operations (Boolean'Pos, "<", ">=", Boolean'Image, etc.) worked as specified. The language forbids a user from specifying a non-increasing representation for an enumeration type, but it doesn't forbid an implementation from doing so for type Boolean. Here's another interesting question. Suppose some perverse implementation used an internal representation of (False => 1, True => 0) for type Boolean, and generated extra code to make all the predefined operations work properly. A packed array of 32 Booleans, for example, would occupy 32 bits, but setting it to (others => True) would clear all 32 bits. I'm not suggesting that this would ever be a good idea, but would it actually violate the RM? -- Keith Thompson (The_Other_Keith) kst@cts.com <*> Qualcomm, San Diego, California, USA It takes a Viking to raze a village.