Why is infinity = 0x3f3f3f3f?

I found some evidence about this here (original content in Chinese); the basic idea is that 0x7fffffff is problematic since it’s already “the top” of the range of 4-byte signed ints; so, adding anything to it results in negative numbers; 0x3f3f3f3f, instead:

  • is still quite big (same order of magnitude of 0x7fffffff);
  • has a lot of headroom; if you say that the valid range of integers is limited to numbers below it, you can add any “valid positive number” to it and still get an infinite (i.e. something >=INF). Even INF+INF doesn’t overflow. This allows to keep it always “under control”:

    a+=b;
    if(a>INF)
        a=INF;
    
  • is a repetition of equal bytes, which means you can easily memset stuff to INF;

  • also, as @Jörg W Mittag noticed above, it has a nice ASCII representation, that allows both to spot it on the fly looking at memory dumps, and to write it directly in memory.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)