2011-02-10 19 views
12

16 bit sabit nokta işlemcim var ve onunla sabit nokta işlemi yapmak istiyorum. Ben imzasız 16 bit ints için kullanmak için doğru veri türünü arıyorum ..Sabit nokta işleme: uint16_t ve uint_fast16_t arasındaki fark nedir?

Sorum şu: uint16_t ve uint_fast16_t arasındaki fark nedir? (Bunlar stdint.h'da yer almaktadır.) Daha hızlı olduğundan uint_fast16_t daha iyi midir?

Teşekkürler!

+1

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

cevap

12

uint16_t işaretsiz bir 16 bit tam sayıdır. uint_fast16_t, en az 16 bite sahip en hızlı imzasız tamsayıdır.

+6

"En hızlı" ifadesini tanımlayabilirseniz daha yararlı olur. –

+3

Unutmayın: "Standart, genişliklerinin N'den büyük olması veya eşit olması dışında bu türlerle ilgili herhangi bir şey vermez. Ayrıca," hızlı "tamsayı türü olmanın ne anlama geldiğine karar vermek için bunu uygulayıcıya bırakır." –

+0

İlginç ... bu veri türünün belirtilen bir boyuta sahip olmadığı garip geliyor .. bu kullanıcıya kalmış .. o_o bu veri türüne bir hata sonucu sizeof() yapar mı? Her durumda, uint_fast16_t'nin bana uygulanacağını düşünmüyorum. Sabit nokta aritmetiği için veri türüm olarak uint16_t dosyasına yapışacağım. :) Teşekkürler ... –

6

uint16_tuint_fast16_t ve uint_least16_t'dan daha kısıtlayıcıdır. Sadece sonraki iki bit 16 bitten daha geniş olmayabilir, aynı zamanda dolgu bitlerine de sahip olabilirler (parite bitleri gibi değeri hesaba katmayan bitler).

Bu fark, imzalı türler için daha da belirgindir. Burada, tam genişlik türleri, negatif değerleri temsil etmek için iki tamamlayıcısını kullanmalıdır.