A página man do bash diz:
! ~ logical and bitwise negation
Os números assinados geralmente são armazenados na representação Complemento de dois :
...
-4 = 1100
-3 = 1101
-2 = 1110
-1 = 1111
0 = 0000
1 = 0001
2 = 0010
3 = 0011
...
Isso significa que, se você pegar um número como 2, ele será interpretado como 0010. Após a negação bit a bit, isso se torna 1101, que é a representação de -3.