#include <stdio.h>
#include <assert.h>
// http://stackoverflow.com/a/37044707/1116364
unsigned long calculate_max_ulong(void) {
unsigned long follow = 0;
unsigned long lead = 1;
while (lead != 0) {
++lead;
++follow;
}
return follow;
}
int main(void) {
assert(sizeof(long) == sizeof(unsigned long)); unsigned long umax_h = calculate_max_ulong() / 2u;
long max = umax_h;
long min = - max - 1;
printf("Range of long (%zu): %ld to %ld\n", sizeof(long), min
, max
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxhc3NlcnQuaD4KLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzcwNDQ3MDcvMTExNjM2NAoKdW5zaWduZWQgbG9uZyBjYWxjdWxhdGVfbWF4X3Vsb25nKHZvaWQpIHsKICB1bnNpZ25lZCBsb25nIGZvbGxvdyA9IDA7CiAgdW5zaWduZWQgbG9uZyBsZWFkID0gMTsKICB3aGlsZSAobGVhZCAhPSAwKSB7CiAgICArK2xlYWQ7CiAgICArK2ZvbGxvdzsKICB9CiAgcmV0dXJuIGZvbGxvdzsKfQoKaW50IG1haW4odm9pZCkgewogIGFzc2VydChzaXplb2YobG9uZykgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKICB1bnNpZ25lZCBsb25nIHVtYXhfaCA9IGNhbGN1bGF0ZV9tYXhfdWxvbmcoKSAvIDJ1OwogIGxvbmcgbWF4ID0gdW1heF9oOwogIGxvbmcgbWluID0gLSBtYXggLSAxOwogIHByaW50ZigiUmFuZ2Ugb2YgbG9uZyAoJXp1KTogJWxkIHRvICVsZFxuIiwgc2l6ZW9mKGxvbmcpLCBtaW4sIG1heCk7CiAgcmV0dXJuIDA7Cn0K