c - Issue with uint64_t type -


say have the following union :

    typedef union {     char array[8];     uint64_t u64; } my_type ; 

i want shift 1 bit 1 through 64 bits reserved, here i've tried :

   ...........................     my_type  vector  ={0};     short index =0;      ( index=0 ; index <64;index++){             printf("  u64 :   %d\n", vektor.u64);             vektor.u64 = (1<<index) ;         } 

the output fine tell 15th, , it's not problem printf parameters, value definitly wrong = 0 . here output :

     u64 :   0   u64 :   1   u64 :   2   u64 :   4   u64 :   8   u64 :   16   u64 :   32   u64 :   64   u64 :   128   u64 :   256   u64 :   512   u64 :   1024   u64 :   2048   u64 :   4096   u64 :   8192   u64 :   16384   u64 :   -32768   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0   u64 :   0 

so question is, i'm doing wrong ? way i'm using atmelstudio6.2.

another problem besides formatting pointed out sourav, value 1 int, , it's unlikely int 64 bits (in fact, seems me on platform int 16 bits).

you need use e.g. 1ull unsigned long long can shifted 64 bits.


Comments