Most fuzzers I think have a dictionary of special values they’ll occasionally use. I wrote a structure-aware fuzzer framework which uses random values for the initial generation, then on subsequent mutations will perform arithmetic/bit flips with a small chance to grab a special value from the dictionary.
Even without a dictionary if your input is reasonably small it should discover these special values given enough iterations.
The dictionary of special values is a good approach to deal with this. Without it, you'd need billions of iterations before randomly trying 0x80000000 for a 32-bit integer.
Even without a dictionary if your input is reasonably small it should discover these special values given enough iterations.