Hola:
Para el programa que hace exit() no hay ninguna diferencia. Puedes poner el código que te de la gana.
Esto viene de los sistemas unix en los que los programas acostumbran a devolver un código de error cuando terminan. Si se pone exit(0) es que el programa a terminado bien y de forma normal. Si se pone exit(-1) o cualquier otro número distinto de cero, es para decir que el programa a terminado porque detecta algún fallo (por ejemplo, se le dice que tiene que tratar un fichero que no puede abrir).
En los sistemas unix cuando un programa llama a otro suele preocuparse de ver el valor devuelto cuando el último termina. Si te fijas en java, arrancas otro programa así
Process p = Runtime.getRuntime.exec("otroPrograma.exe");
Puedes esperar que el programa termine así
int error = p.waitFor();
El entero que te devuelve waitFor() es justamente el entero que ponga el programa arrancado cuando hace exit().
En fin, una especie de convención para que cuando un programa llame a otro, el primero se entere qué tal le ha ido al segundo.
Se bueno.