2011-02-10 6 views
12

Mam 16-bitowy, stały procesor punktowy i chcę z nim robić stałe przetwarzanie punktowe. Szukam prawidłowego typu danych dla niepodpisanych 16-bitowych int.Naprawiono przetwarzanie punktów: jaka jest różnica między uint16_t i uint_fast16_t?

Moje pytanie brzmi: jaka jest różnica między uint16_t i uint_fast16_t? (Są one zawarte w stdint.h.) Czy lepiej jest mieć uint_fast16_t, ponieważ jest szybszy?

Dzięki!

+1

http://pl.wikipedia.org/wiki/Stdint.h#Integer_types – kennytm

Odpowiedz

12

uint16_t to niepodpisana 16-bitowa liczba całkowita. uint_fast16_t to najszybsza dostępna liczba całkowita bez znaku z co najmniej 16 bitami.

+6

Odpowiedź byłaby bardziej przydatna, gdyby można było zdefiniować "najszybszy". –

+3

Nieważne: "Standard nie nakazuje niczego na temat tych typów, z wyjątkiem tego, że ich szerokości muszą być większe lub równe N. Pozostawia to także wykonawcom decyzję, co to znaczy być" szybkim "typem całkowitym." –

+0

Interesujące ... wydaje mi się dziwne, że ten typ danych nie ma określonego rozmiaru .. to zależy od użytkownika .. o_o więc czy wykonanie sizeof() do tego typu danych spowodowałoby błąd? W każdym razie nie sądzę, aby uint_fast16_t dotyczył mnie. Będę trzymać się uint16_t jako mojego typu danych dla ustalonej arytmetyki punktowej. :) Dzięki ... –

6

uint16_t jest bardziej restrykcyjne niż uint_fast16_t i uint_least16_t. Nie tylko to, że te dwa następne mogą być szersze niż 16 bitów, mogą one również zawierać bity dopełniające (bity, które nie uwzględniają wartości takiej jak bity parzystości).

Ta różnica jest jeszcze wyraźniejsza w przypadku podpisanych typów. W tym przypadku dokładne typy szerokości muszą wykorzystywać uzupełnienie dwójkowe do reprezentowania wartości ujemnych.

Powiązane problemy