Unix Technical Forum

SEO

vBulletin Search Engine Optimization


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Bugs

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-19-2008, 02:49 PM
Roman Kononov
 
Posts: n/a
Default BUG #4114: Inconsistent shift operator


The following bug has been logged online:

Bug reference: 4114
Logged by: Roman Kononov
Email address: kononov@dls.net
PostgreSQL version: 8.3.1
Operating system: x86_64 GNU/Linux
Description: Inconsistent shift operator
Details:

The below test cases show the obvious inconsistency between different
integer types.

test=# \t
Showing only tuples.
test=# select 1::int2 << 17;
0

test=# select 1::int4 << 33;
2

test=# select 1::int8 << 65;
2

test=# select 2::int2 >> 17;
0

test=# select 2::int4 >> 33;
1

test=# select 2::int8 >> 65;
1

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-20-2008, 07:10 PM
Zdenek Kotala
 
Posts: n/a
Default Re: BUG #4114: Inconsistent shift operator

Roman Kononov napsal(a):
> The following bug has been logged online:
>
> Bug reference: 4114
> Logged by: Roman Kononov
> Email address: kononov@dls.net
> PostgreSQL version: 8.3.1
> Operating system: x86_64 GNU/Linux
> Description: Inconsistent shift operator
> Details:
>
> The below test cases show the obvious inconsistency between different
> integer types.
>
> test=# \t
> Showing only tuples.
> test=# select 1::int2 << 17;
> 0
>
> test=# select 1::int4 << 33;
> 2
>
> test=# select 1::int8 << 65;
> 2
>
> test=# select 2::int2 >> 17;
> 0
>
> test=# select 2::int4 >> 33;
> 1
>
> test=# select 2::int8 >> 65;
> 1


It seems to be OK regarding how C shift operator works. Try

#include <stdio.h>
#include <inttypes.h>

void fce(int16_t arg1, int32_t arg2)
{
int16_t res = arg1 << arg2;
printf("result: %i\n", res);
}

int main()
{
fce(1,17);
return 0;
}



Zdenek

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 04-21-2008, 05:47 AM
Sam Mason
 
Posts: n/a
Default Re: BUG #4114: Inconsistent shift operator

On Sun, Apr 20, 2008 at 08:17:50PM +0200, Zdenek Kotala wrote:
> Roman Kononov napsal(a):
> >The below test cases show the obvious inconsistency between different
> >integer types.

>
> It seems to be OK regarding how C shift operator works. Try


Yes, but I interpret this behaviour as not being very useful for people
writing SQL code that uses the shift operators. C is a very low level
language and you almost always end up writing platform specific code,
SQL is supposed to be much higher level and should abstract away system
specific differences.

I've not been able to think of a nice way of doing this though.


Sam

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT. The time now is 06:25 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145