I have this code in C (it\'s for study only):
char x;
uint64_t total = 0;
for(x = 20; x < 30; x++){
total = (((((1 << x) * x) /
Because 1
is an int
, 32 bits, so (1 << 27)*27
overflows. Use 1ull
.
Regarding your comment, if x
is a uint64_t
, then 1 << x
is still an int
, but for the multiplication it would be cast to uint64_t
, so there'd be no overflow. However, if x >= 31
, 1 << x
would be undefined behaviour (as the resulting value cannot be represented by a signed 32 bit integer type).
I guess your problem is, you calculate with 32bit and assign it later to a 64 bit value
division by 64 is the same as not shift 6 bit
char x;
uint64_t one = 1;
uint64_t total = 0;
for(x = 20; x < 30; x++){
total = ((((one << (x - 6)) * x) + 1) * sizeof(uint64_t));
printf("%d - %llu\n", x, total);
}
not compiled yet