Karena dalam UNIX / POSIX, kode keluar dari suatu program didefinisikan sebagai nilai 8-bit yang tidak ditandatangani. Konversi -1 menjadi 8-bit yang tidak ditandatangani memberi 255.
Edit untuk ditambahkan:
Untuk memberikan lebih detail: keluarga panggilan * () sistem panggilan dalam UNIX mengkodekan hasil proses menjadi integer 32bit tunggal. 32 bit dari hasil tersebut selanjutnya dipecah untuk memberikan informasi seperti apakah proses dumped core, keluar karena sinyal (dan yang mana), dll. Dari 32 bit itu, hanya 8 bit yang disediakan untuk kode keluar dari proses dan itu ditafsirkan sebagai nilai yang tidak ditandatangani.
Model fork / exec / wait dari UNIX / POSIX adalah salah satu fitur yang paling tua dan paling tertanam; jika Anda merancang sistem operasi baru hari ini Anda mungkin melakukan sesuatu yang berbeda (setidaknya gunakan 64 bit :-)).
Di sisi lain, secara praktis, apakah benar-benar berguna untuk memiliki> 255 kode keluar? Aku meragukan itu. Jika Anda benar-benar menginginkan sesuatu yang lebih kuat, saya sarankan Anda beralih ke "string keluar", alih-alih kode keluar numerik dengan rentang yang lebih luas.