2011-02-10 14 views
12

Tengo un procesador de punto fijo de 16 bits y quiero hacer un procesamiento de punto fijo con él. Estoy buscando el tipo de datos correcto para utilizar para las entradas sin signo de 16 bits ..Procesamiento de punto fijo: ¿cuál es la diferencia entre uint16_t y uint_fast16_t?

Mi pregunta es: ¿cuál es la diferencia entre un uint16_t y uint_fast16_t? (Estos están incluidos en el stdint.h.) ¿Es uint_fast16_t mejor ya que es más rápido?

Gracias!

+1

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

Respuesta

12

uint16_t es un entero de 16 bits sin signo. uint_fast16_t es el número entero sin signo más rápido disponible con al menos 16 bits.

+6

La respuesta sería más útil si pudiera definir "más rápido". –

+3

No importa: "La norma no obliga a nada sobre estos tipos, excepto que sus anchos deben ser mayores o iguales a N. También deja que el implementador decida qué significa ser un tipo entero" rápido ". –

+0

Interesante ... me parece extraño que este tipo de datos no tenga un tamaño especificado ... le corresponde al usuario ... o_o entonces, ¿haría sizeof() a este tipo de datos un error? En cualquier caso, no creo que uint_fast16_t se aplique a mí. Me limitaré al uint16_t como mi tipo de datos para la aritmética de punto fijo. :) Gracias ... –

6

uint16_t es más restrictivo que uint_fast16_t y uint_least16_t. No solo que los dos últimos pueden ser más anchos que 16 bits, también pueden tener bits de relleno (bits que no tienen en cuenta el valor, como bits de paridad).

Esta diferencia es aún más pronunciada para los tipos con signo. Aquí los tipos de ancho exacto deben usar el complemento de dos para representar valores negativos.

Cuestiones relacionadas