For signed integers, why don't representative the smallest number as all zeros in binary, and the largest as all ones?
This would make it basically impossible to implement the C language. In the C language, a value that can represented both as a signed and unsigned integer must have the same bit representation. 

There are other problems, like you can’t use the same hardware for adding signed and unsigned integers, conversion between signed and unsigned requires an actual hardware operation.