Używam inttypu do przechowywania wartości. Zgodnie z semantyką programu, wartość zawsze zmienia się w bardzo małym zakresie (0 - 36) i int(nie a char) jest używana tylko ze względu na wydajność procesora.
Wygląda na to, że na tak małym zakresie liczb całkowitych można przeprowadzić wiele specjalnych optymalizacji arytmetycznych. Wiele wywołań funkcji na tych liczbach całkowitych może zostać zoptymalizowanych do postaci małego zestawu operacji „magicznych”, a niektóre funkcje mogą być nawet zoptymalizowane pod kątem przeszukiwania tabel.
Czy można więc powiedzieć kompilatorowi, że intjest to zawsze w tak małym zakresie i czy kompilator może wykonać te optymalizacje?
unsignedtypów, ponieważ są one łatwiejsze do zrozumienia dla kompilatora.
var value: 0..36;.
inti unsigned inttrzeba być steru- lub zerowej wydłużony z 32 do 64-bit, też w większości systemów z 64-bitowych wskaźników. Zauważ, że na x86-64 operacje na rejestrach 32-bitowych rozszerzają się zera do 64-bitów za darmo (nie rozszerzanie znaku, ale przepełnienie znaku jest niezdefiniowanym zachowaniem, więc kompilator może po prostu użyć 64-bitowej matematyki ze znakiem, jeśli chce). Widzisz więc tylko dodatkowe instrukcje do 32-bitowych argumentów funkcji rozszerzających o zero, a nie wyniki obliczeń. Byłbyś dla węższych, niepodpisanych typów.