Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Outputting u64 word using printf?

Author: James Swafford

Date: 07:54:51 06/07/04

Go up one level in this thread


On June 07, 2004 at 10:46:28, Uri Blass wrote:

>On June 07, 2004 at 10:40:09, Fabien Letouzey wrote:
>
>>On June 07, 2004 at 10:36:58, Vincent Diepeveen wrote:
>>
>>>On June 07, 2004 at 10:30:50, Fabien Letouzey wrote:
>>
>>>r = 1<<36; // works for good compilers not for the rest
>>
>>Hm, my understanding is that first "1<<36" should be calculated (so it's 0 if
>>sizeof(int) <= 4) and *then* cast into r's type (oops, too late).
>>
>>Fabien.
>
>A smart compiler should understand that 1<<36 cannot mean 0 because in that case
>the programmer has no reason to write it in that way.
>
>The only logical meaning of 1<<36 is that it is a 64 bit number(espacially when
>r is defined as a 64 bit number).


gcc warns you about this:

james@devlaptop temp $ gcc test.c
test.c: In function `main':
test.c:7: warning: left shift count >= width of type


#include <stdio.h>

int main() {
   typedef unsigned long long u64;
   u64 r=1;
   //r<<=36;
   r = 1 << 36;
   printf("%Lu\n",r);


   return 0;
}


--
James

>
>Uri



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.