www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - What ?

reply "matovitch" <camille.brugel laposte.net> writes:
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 !
Mar 30 2015
next sibling parent reply "Vladimir Panteleev" <vladimir thecybershadow.net> writes:
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;
Mar 30 2015
parent "matovitch" <camille.brugel laposte.net> writes:
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 !
Mar 30 2015
prev sibling parent reply "Brian Schott" <briancschott gmail.com> writes:
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;
Mar 30 2015
parent "bearophile" <bearophileHUGS lycos.com> writes:
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
Mar 30 2015