Re: confused about bit strings - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: confused about bit strings
Date
Msg-id Pine.LNX.4.44.0310082227460.26413-100000@peter.localdomain
Whole thread Raw
In response to confused about bit strings  (Neil Conway <neilc@samurai.com>)
List pgsql-hackers
Neil Conway writes:

> nconway=# select 1::bit;
>  bit
> -----
>  0
> (1 row)

Oops.  I've always thought that casting between int and bit should be
disallowed, but apparently it keeps sneaking back in.

> nconway=# select X'4'::bit varying;
>  varbit
> --------
>  0100
> (1 row)
> -- why is that 4 bits, not 3?

SQL says so:
       12) The declared type of a <hex string literal> is fixed-length           bit string. Each <hexit> appearing in
theliteral is equivalent           to a quartet of bits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C,           D, E, and F
areinterpreted as 0000, 0001, 0010, 0011, 0100,           0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110,
       and 1111, respectively. The <hexit>s a, b, c, d, e, and f have           respectively the same values as the
<hexit>sA, B, C, D, E, and           F.
 

> nconway=# select "bit"('14'::int);
>                bit
> ----------------------------------
>  00000000000000000000000000001110
> (1 row)
> -- shouldn't bit be equivalent to bit(1), which should be
> right-truncated?

It is, but here you're calling a function, not referring to the type.

-- 
Peter Eisentraut   peter_e@gmx.net



pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Separate shared_buffer management process
Next
From: Bruce Momjian
Date:
Subject: Re: 2-phase commit