this C code
unsigned long int a, b, x;
float c, d, y;
a = 6;
b = 2;
x = a/b;
c = 6.0;
d = 2.0;
y = c/d;
printf("\n x: %d \n y: %f \n",x,y);
works correctly and prints out
x: 3
y: 3.000000
however, when I change the first line to this
unsigned long long int a, b, x;
I get this output:
x: 3
y: 0.000000
this really boggles me… I haven’t changed anything with c,d, and y – why am I getting this? I’m using gcc on linux
For the latter one use:
Use
ufor unsigned integrals (your output is only correct because you use small values). Use thellmodifier for long longs otherwise printf will use the wrong size for decoding the second parameter (x) for printf, so it uses bad address to fetch y.