Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PostgreSQL bitwise shift operator for 64-bit numbers

Tags:

postgresql

I have an issue with bitwise shifting. It works for 32 bit, but I need this up to a 64-bit number.

Example:

select
(1 << 1)  as ok_1,
(1 << 2)  as ok_2,
--...
(1 << 30)  as ok_30,
(1 << 31)  as NOT_ok_31

In the last column (NOT_ok_31) instead -2147483648 I expect (10000000000000000000000000000000)₂ = (1 × 2³¹) + ...+(0 × 2¹) + (0 × 2⁰) = 2147483648

Any Idea? Thanks in advance.

like image 734
Mitko Keckaroski Avatar asked Feb 19 '26 16:02

Mitko Keckaroski


1 Answers

32-bit integer (10000000000000000000000000000000)₂ has the sign bit set so it is a negative number. First cast 1 as bigint so that the result will be a 64-bit integer too.

select
(1 << 1)  as ok_1,
(1 << 2)  as ok_2,
(1::bigint << 31) as ok_31,
(1::bigint << 33) as ok_33;
ok_1 ok_2 ok_31 ok_33
2 4 2147483648 8589934592
like image 159
Stefanov.sm Avatar answered Feb 21 '26 14:02

Stefanov.sm



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!