Thread overview
What ?
Mar 30, 2015
matovitch
Mar 30, 2015
Vladimir Panteleev
Mar 30, 2015
matovitch
Mar 30, 2015
Brian Schott
Mar 30, 2015
bearophile
March 30, 2015
Hi again again,

ulong u = 1 << 63;

Raise :

Error: shift by 63 is outside the range 0..31

This is a bug isn't it, the ulong are supposed to be on 64 bits ? I guess it's time I go to bed.

Have a nice night !
March 30, 2015
On Monday, 30 March 2015 at 22:34:00 UTC, matovitch wrote:
> Hi again again,
>
> ulong u = 1 << 63;
>
> Raise :
>
> Error: shift by 63 is outside the range 0..31
>
> This is a bug isn't it, the ulong are supposed to be on 64 bits ? I guess it's time I go to bed.
>
> Have a nice night !

ulong, yes, but 1 is of type int.

Correct code:

ulong u = 1L << 63;
March 30, 2015
On Monday, 30 March 2015 at 22:34:00 UTC, matovitch wrote:
> Hi again again,
>
> ulong u = 1 << 63;
>
> Raise :
>
> Error: shift by 63 is outside the range 0..31
>
> This is a bug isn't it, the ulong are supposed to be on 64 bits ? I guess it's time I go to bed.
>
> Have a nice night !

The problem is that `1` isn't a ulong. The reason for this is probably C compatibility. Do this instead:

ulong u = 1L << 63;
March 30, 2015
On Monday, 30 March 2015 at 22:34:55 UTC, Vladimir Panteleev wrote:
> On Monday, 30 March 2015 at 22:34:00 UTC, matovitch wrote:
>> Hi again again,
>>
>> ulong u = 1 << 63;
>>
>> Raise :
>>
>> Error: shift by 63 is outside the range 0..31
>>
>> This is a bug isn't it, the ulong are supposed to be on 64 bits ? I guess it's time I go to bed.
>>
>> Have a nice night !
>
> ulong, yes, but 1 is of type int.
>
> Correct code:
>
> ulong u = 1L << 63;

Arf ! Safety. Danke !
March 30, 2015
Brian Schott:

> Do this instead:
>
> ulong u = 1L << 63;

I suggest a more explicit:

ulong u = 1UL << 63;

Alternative:

ulong u = 2UL ^^ 63;

Bye,
bearophile