Friday 10 November 2017

C Float Mantissa Binary Options


Dado doble x. Y suponiendo que se encuentra en 0,1. Suponga por ejemplo que x0.3 En binario, (manteniendo 10 dígitos después del punto decimal), se representa como quiero escribir un código C que extraerá los 10 dígitos mostrados después del punto decimal. En otras palabras, quiero extraer el entero (0100110011) 2. Ahora soy bastante nuevo en el cambio de bits y la solución (ingenua) que tengo para el problema es el siguiente Entonces temp en binario tendrá los 10 dígitos necesarios. ¿Es esta una forma segura de realizar el proceso anterior o hay maneras más seguras / más correctas de hacer esto? No quiero que los dígitos extraídos en forma de una matriz de caracteres. Yo específicamente quiero un entero (O entero sin signo) para esto. La razón para hacer esto es que en la generación de octrees, los puntos en el espacio se dan las claves de hash basadas en su posición nombrada como las llaves de Morton. Estas llaves se almacenan generalmente como números enteros. Después de obtener las llaves de integración para todos los puntos que luego se ordenan. Teóricamente, estas claves pueden obtenerse escalando las coordenadas a 0,1, extrayendo los bits. Y entrelazándolos. Pidió el 16 de diciembre a las 17: 36printf Imprime los datos formateados en stdout Escribe la cadena C señalada por formato a la salida estándar (stdout). Si formato incluye especificadores de formato (subsecuencias que comienzan con), los argumentos adicionales que siguen al formato se formatean e insertan en la cadena resultante que sustituye a sus respectivos especificadores. Parámetros format C string que contiene el texto a ser escrito en stdout. Opcionalmente puede contener especificadores de formato incrustado que se reemplazan por los valores especificados en argumentos adicionales posteriores y se formatean según lo solicitado. Donde el carácter del especificador en el extremo es el componente más significativo, puesto que define el tipo y la interpretación de su argumento correspondiente: Significado decimal entero Unsigned decimal entero Unsigned hexadecimal entero Unsigned hexadecimal entero (mayúsculas) Decimal punto flotante, minúsculas Decimal flotante, Mayúsculas Notación científica (mantisa / exponente), minúsculas Notación científica (mantisa / exponente), mayúsculas Utilice la representación más corta: e o f Utilice la representación más corta: E o F Hexadecimal punto flotante, minúscula Hexadecimal punto flotante, mayúscula . El argumento correspondiente debe ser un puntero a un int firmado. El número de caracteres escritos hasta ahora se almacena en la ubicación puntiaguda. A seguido de otro carácter escribirá un solo en la secuencia. El especificador de formato también puede contener sub-especificadores: flags. Anchura. precisión y modificadores (en ese orden), que son opcionales y siguen estas especificaciones: Justificación a la izquierda dentro del ancho de campo dado La justificación a la derecha es la predeterminada (véase el sub-especificador de ancho). Fuerza para preceder el resultado con un signo más o menos (o -) incluso para los números positivos. Por defecto, sólo los números negativos están precedidos de un signo. Si no se va a escribir ningún signo, se inserta un espacio en blanco antes del valor. Se utiliza con o. X o X el valor se precede con 0. 0x o 0X respectivamente para valores diferentes de cero. Se utiliza con un. A . E. E. F. F G o G obliga a la salida escrita a contener un punto decimal aunque no se sigan más dígitos. De forma predeterminada, si no aparecen dígitos, no se escribe un punto decimal. Left-pads el número con ceros (0) en lugar de espacios cuando se especifica el relleno (vea el sub-especificador de ancho). Para especificadores de números enteros (d, i, u, x, X): precision especifica el número mínimo de dígitos a escribir. Si el valor a escribir es menor que este número, el resultado se rellena con ceros a la izquierda. El valor no se trunca incluso si el resultado es más largo. Una precisión de 0 significa que no se escribe ningún carácter para el valor 0. Para . A . E. E. F y F: es el número de dígitos a imprimir después del punto decimal (por defecto, esto es 6). Para especificadores G y G: Es el número máximo de dígitos significativos que se deben imprimir. Para s. Este es el número máximo de caracteres a imprimir. De forma predeterminada, todos los caracteres se imprimen hasta que se encuentra el carácter nulo final. Si el período se especifica sin un valor explícito para la precisión. 0 se asume. La precisión no se especifica en la cadena de formato, sino como un argumento adicional de valor entero que precede al argumento que debe formatearse. El sub-especificador de longitud modifica la longitud del tipo de datos. Este es un gráfico que muestra los tipos utilizados para interpretar los argumentos correspondientes con y sin especificador de longitud (si se utiliza un tipo diferente, se realiza la promoción o conversión apropiada de tipo, si se permite): Nota sobre el especificador c: toma un int ( O wintt) como argumento, pero realiza la conversión adecuada a un valor char (o un wchart) antes de formatearlo para la salida. Nota: Las filas amarillas indican los especificadores y sub-especificadores introducidos por C99. Consulte ltcinttypesgt para los especificadores de tipos extendidos. . (Argumentos adicionales) Dependiendo de la cadena de formato, la función puede esperar una secuencia de argumentos adicionales, cada uno conteniendo un valor que se utilizará para reemplazar un especificador de formato en la cadena de formato (o un puntero a una ubicación de almacenamiento, para n). Debe haber al menos tantos de estos argumentos como el número de valores especificados en los especificadores de formato. Los argumentos adicionales son ignorados por la función. Valor devuelto En caso de éxito, se devuelve el número total de caracteres escritos. Si se produce un error de escritura, se establece el indicador de error (ferror) y se devuelve un número negativo. Si se produce un error de codificación de caracteres multibyte al escribir caracteres anchos, errno se establece en EILSEQ y se devuelve un número negativo. Compatibilidad de ejemplo Las implementaciones de bibliotecas particulares pueden admitir especificadores y sub-especificadores adicionales. Los enumerados aquí están soportados por los últimos estándares de C y C (ambos publicados en 2011), pero los de color amarillo se introdujeron en C99 (sólo se requiere para las implementaciones de C desde C11) y pueden no ser compatibles con bibliotecas que cumplen con estándares antiguos. Ver también pone Escribir cadena a stdout (función) scanf Leer datos formateados desde stdin (función) fprintf Escribir datos formateados a flujo (función) fwrite Escribir bloque de datos a flujo (función) funciones: objetos: tipos: macro constantes: Estoy trabajando En un programa que necesita convertir un número de 32 bits en un número decimal. El número que obtengo de entrada es un número de 32 bits representado como punto flotante. El primer bit es el signo, los siguientes 8 bits son el exponente, y los otros 23 bits son mantisa. Estoy trabajando el programa en C. En la entrada, consigo ese número como una disposición del char, y después de eso estoy haciendo una nueva matriz del int donde almaceno la muestra. El exponente y la mantisa. Pero, tengo un problema con la mantisa cuando estoy tratando de almacenarla en algún tipo de datos, porque necesito usar la mantisa como un número, no como una matriz: formulasign (10.mantissa) 2 (exponente-127). Aquí está el código que uso para almacenar la mantisa, pero aún así el programa me da resultados equivocados: mantissa es una matriz int donde ya he convertido la mantisa de una matriz de caracteres. Cuando obtengo el valor de la fórmula. Tiene que ser un número binario, y tengo que convertirlo a decimal, así que voy a obtener el valor del número. ¿Puedes ayudarme con el almacenamiento de los 23 bits de la mantisa Y, no debo usar funciones como strtoul que convierten el número de 32 bits directamente en binario. Tengo que usar la fórmula. Preguntó Apr 23 13 at 8:34

No comments:

Post a Comment