Saya menggunakan int
tipe untuk menyimpan nilai. Dengan semantik program, nilainya selalu bervariasi dalam kisaran yang sangat kecil (0 - 36), dan int
(bukan a char
) digunakan hanya karena efisiensi CPU.
Sepertinya banyak optimasi aritmatika khusus dapat dilakukan pada sejumlah kecil bilangan bulat. Banyak pemanggilan fungsi pada bilangan bulat itu mungkin dioptimalkan menjadi satu set kecil operasi "ajaib", dan beberapa fungsi bahkan mungkin dioptimalkan ke dalam pencarian tabel.
Jadi, apakah mungkin untuk memberitahu kompiler bahwa ini int
selalu dalam kisaran kecil, dan apakah mungkin bagi kompiler untuk melakukan optimasi tersebut?
unsigned
jenis karena mereka lebih mudah untuk dikompilasi dengan kompilator.
var value: 0..36;
.
int
dan unsigned int
perlu sign-atau zero-extended dari 32 ke 64-bit, juga, pada kebanyakan sistem dengan pointer 64-bit. Perhatikan bahwa pada x86-64, operasi pada register 32-bit nol-rentangkan ke 64-bit gratis (bukan perpanjangan tanda, tetapi overflow yang ditandatangani adalah perilaku yang tidak terdefinisi, sehingga kompiler dapat menggunakan matematika bertanda-tangan 64-bit jika diinginkan). Jadi, Anda hanya melihat instruksi tambahan untuk memperpanjang argumen fungsi 32-bit, bukan hasil perhitungan. Anda akan melakukannya untuk tipe unsigned yang lebih sempit.