Or you could just use Smalltalk, where any number that fits in a pointer-sized variable is stored like that and anything that doesn't is transparently promoted to an object.
That's implementation dependent, but I think most good Smalltalk and Lisp implementations do it like that. If you reserve two tags for immediate integers (one for positive, one for negative), you lose only two bits. Having 64-bit system, and memory access as bottleneck, that's incredibly good solution. Completely future proof solution even.
In 2001, FEMA warned that a hurricane striking New Orleans was one of the three most likely disasters in the U.S. But the Bush administration cut New Orleans flood control funding by 44 percent to pay for the Iraq war
"What if" is a trademark of Hewlett Packard, so stop using it in your sentences without permission, or risk being sued.