Komputer (atau lebih tepatnya kompiler) sama sekali tidak peduli apa nomor dasar yang Anda gunakan dalam kode sumber Anda. Bahasa pemrograman yang paling umum digunakan mendukung basis 8 (oktal), 10 (desimal) dan 16 (heksadesimal) secara langsung. Beberapa juga mendukung olahraga langsung untuk nomor basis 2 (biner). Bahasa khusus dapat mendukung basis nomor lain juga. (Dengan "langsung mendukung", maksud saya bahwa mereka memungkinkan masuknya angka dalam basis itu tanpa menggunakan trik matematika seperti bitshifting, perkalian, pembagian dll dalam kode sumber itu sendiri. Misalnya, C langsung mendukung basis-16 dengan0x
angka awalan dan himpunan digit heksadesimal biasa dari 0123456789ABCDEF. Sekarang, trik semacam itu mungkin berguna untuk membuat angka lebih mudah dipahami dalam konteks, tetapi selama Anda dapat mengekspresikan nomor yang sama tanpa itu, melakukannya - atau tidak - hanya kenyamanan.)
Pada akhirnya, bagaimanapun, itu tidak penting. Katakanlah Anda memiliki pernyataan seperti ini:
int n = 10;
Tujuannya adalah untuk membuat variabel integer dan menginisialisasi dengan angka desimal 10. Apa yang dilihat komputer?
i n t n = 1 0 ;
69 6e 74 20 6e 20 3d 20 31 30 3b (ASCII, hex)
Compiler akan membatalkan ini, dan menyadari bahwa Anda mendeklarasikan variabel tipe int
dengan nama n
, dan menetapkan beberapa nilai awal. Tapi apa nilainya?
Ke komputer, dan mengabaikan byte order dan masalah alignment, input untuk nilai awal variabel adalah 0x31 0x30
. Apakah ini berarti bahwa nilai awal adalah 0x3130 (12592 di basis 10)? Tentu saja tidak. Pengurai bahasa harus terus membaca file dalam pengkodean karakter yang digunakan, sehingga membaca 1
0
diikuti oleh terminator pernyataan. Karena dalam bahasa ini basis 10 diasumsikan, ini dibaca (mundur) sebagai "0 yang, 1 puluhan, akhir". Artinya, nilai 10 desimal.
Jika kami menetapkan nilai dalam heksadesimal, dan bahasa kami menggunakan 0x
untuk menentukan bahwa nilai berikut dalam heksadesimal, maka kami mendapatkan yang berikut:
i n t n = 0 x 1 0 ;
69 6e 74 20 6e 20 3d 20 30 78 31 30 3b (ASCII, hex)
Compiler melihat 0x
(0x30 0x78) dan mengakui itu sebagai awalan base-16, jadi mencari nomor base-16 yang valid mengikutinya. Hingga terminator pernyataan, berbunyi 10
. Ini diterjemahkan menjadi 0 "yang", 1 "enam belas", yang bekerja sampai 16 di basis 10. Atau 00010000 di basis 2. Atau bagaimanapun Anda ingin mewakilinya.
Dalam kedua kasus, dan mengabaikan optimasi demi kesederhanaan, kompiler membagikan penyimpanan yang cukup untuk menampung nilai int
variabel tipe, dan menempatkan di sana nilai yang dibacanya dari kode sumber menjadi semacam variabel holding sementara. Itu kemudian (kemungkinan banyak kemudian) menulis nilai-nilai biner yang dihasilkan ke file kode objek.
Seperti yang Anda lihat, cara Anda menulis nilai numerik dalam kode sumber sama sekali tidak penting. Ini mungkin memiliki efek yang sangat kecil pada waktu kompilasi, tetapi saya akan membayangkan bahwa (sekali lagi, mengabaikan optimasi seperti caching disk oleh sistem operasi) hal-hal seperti turbulensi acak di sekitar piringan berputar disk, waktu akses disk, tabrakan bus data , dll., memiliki efek yang jauh lebih besar.
Intinya: jangan khawatir tentang hal itu. Tulis angka dalam basis yang didukung oleh bahasa pemrograman pilihan Anda dan yang masuk akal untuk bagaimana angka tersebut akan digunakan dan / atau dibaca. Anda menghabiskan lebih banyak waktu untuk membaca jawaban ini daripada yang pernah Anda dapat dalam waktu kompilasi dengan menjadi pandai tentang basis nomor yang digunakan dalam kode sumber. ;)