Eric Chamberland <[email protected]> writes: > int main() { > int a=1741445953; // my number of unknowns... > int b=2*(a+2); > unsigned long int c = b; > std::cout << " a: " << a << " b: " << b << " c: " << c <<std::endl; > return 0; > } > > and it gives: > > a: 1741445953 b: -812075386 c: 18446744072897476230
This comes from the integer casting rules.
$ cat overflow.c
#include <stdio.h>
int main(int argc,char **argv) {
int a=1741445953;
size_t a1 = 2*(a+2);
size_t a2 = 2ll*(a+2);
printf("%zd %zd\n", a1, a2);
return 0;
}
$ make overflow && ./overflow
cc overflow.c -o overflow
-812075386 3482891910
signature.asc
Description: PGP signature
