コンピュータの内部表現において最上位ビットに1が立つと、いろんな場合に例外が発生します。
一番簡単な例では、ほとんどのコンピューター言語(Java、C++、etc)でサポートされている4byte整数があります。
4byte整数なので、4×8=32bitで数値を表すわけですが、この最上位ビットが1のときは負数、0のときは正数になります。
2進表現で0を32個も記述するのは冗長なので16個(16bit=2byte)で説明することにします。(2byte整数で説明しますが、4byte整数でも同じことが発生します。)
2進表現で、0000 0000 0000 0000から1ずつ増やしていくと、最上位ビットが1になった瞬間に10進表現の正負が逆転して、正の最大値から負の最大値となります。

2進表現
10進表現
0000 0000 0000 0000
0
0000 0000 0000 0001
1
0000 0000 0000 0010
2
:

0111 1111 1111 1110
32766
0111 1111 1111 1111
32767
1000 0000 0000 0000
-32768
1000 0000 0000 0001
-32767
1000 0000 0000 0010
-32766
:

1111 1111 1111 1110
-2
1111 1111 1111 1111
-1

覚えておいて欲しいのは、多くの処理系(言語とかOS)で、正の最大値(32767)に1を加えると、エラーもワーニングも発生せずに負の最大値 (-32768)に値が変わるということです。(一般にラップアラウンド:wrap aroundといいます。)私が過去に対応したシステムでも4byte整数(Integer)でラップアラウンドが発生していたのを数年にわたって気付かず、発覚後に大問題になったことがありました。
正確なところが知りたい人は、「二の補数」でググってみてください。