Sunday, 5 November 2017

0b1111 Binary Options


No estoy seguro de cómo obtener lo que quieres usando la lib estándar. Hay un puñado de scripts y paquetes por ahí que hará la conversión para usted. Sólo quería anotar el por qué. Y por qué no es cojo. Bin () no devuelve bits binarios. Convierte el número en una cadena binaria. El 0b principal le dice al intérprete que está tratando con un número binario. Según la definición del lenguaje python. De esta manera se puede trabajar directamente con números binarios, como esto no es cojo. eso es genial. Convierta un número entero en una cadena binaria. Los literales enteros y enteros largos se describen mediante las siguientes definiciones léxicas: Funciona mejor si proporciona una máscara. De esa manera se especifica hasta qué punto para firmar extender. O quizás más generalmente: en la teoría básica, la anchura real del número es una función del tamaño del almacenaje. Si es un número de 32 bits, entonces un número negativo tiene un 1 en el MSB de un conjunto de 32. Si es un valor de 64 bits, entonces hay 64 bits para mostrar. Pero en Python, la precisión entera se limita sólo a las restricciones de su hardware. En mi computadora, esto realmente funciona. Pero consume 9 GB de RAM sólo para almacenar el valor de x. Cualquier cosa más alta y tengo un MemoryError. Si tuviera más memoria RAM, podría almacenar números más grandes. Así que con eso en mente, lo que el número binario representa -1. Python es capaz de interpretar literalmente millones (e incluso miles de millones) de bits de precisión, como muestra el ejemplo anterior. En el complemento 2s, el bit de signo se extiende hasta la izquierda, pero en Python no hay número predefinido de bits, hay tantos como se necesite. Pero entonces usted se encuentra con la ambigüedad: el binario 1 representa 1. o -1. Bueno, podría ser cualquiera. 111 representa 7 o -1. Una vez más, podría ser cualquiera. Así que 111111111 representan 511. o -1. Bien, ambos, dependiendo de su precisión. Python necesita una manera de representar estos números en binario para que no haya ambigüedad de su significado. El prefijo 0b sólo dice que este número está en binario. Al igual que 0x significa que este número está en hexadecimal. Así que si digo 0b1111. Cómo puedo saber si el usuario quiere -1 o 15 Hay dos opciones: Opción A: El bit de signo Usted podría declarar que todos los números están firmados, y el bit de la izquierda es el bit de signo. Esto significa que 0b1 es -1, mientras que 0b01 es 1. Eso también significa que 0b111 es también -1, mientras que 0b0111 es 7. Al final, esto es probablemente más confuso que útil, particularmente porque la mayoría de la aritmética binaria va a ser sin signo de todos modos, Y las personas tienen más probabilidades de encontrar errores al marcar accidentalmente un número como negativo porque no incluyen un bit de signo explícito. Opción B: La indicación de signo Con esta opción, los números binarios están representados sin signo, y los números negativos tienen un prefijo -, igual que en decimal. Esto es (a) más coherente con decimal, (b) más compatible con la forma en que los valores binarios son más probable va a ser utilizado. Se pierde la capacidad de especificar un número negativo utilizando su representación de complemento de dos, pero recuerde que el complemento de dos es un detalle de implementación de almacenamiento, no una indicación adecuada del valor subyacente en sí. No debería ser algo que el usuario tiene que entender. Al final, la opción B tiene más sentido. Hay menos confusión y el usuario no está obligado a entender los detalles de almacenamiento. Antes de que usted puede responder a esta pregunta, usted tiene que entender las diversas codificaciones binarias que se habla. Los dos en cuestión son el complemento 2s y la magnitud de la señal. Cero y los números positivos se representan como probablemente se esperaría. Digamos que tenemos binario de 4 bits. 0000 es cero, 0001 es uno, 0010 es dos, etc. Cada posición de dígito vale el número de veces base el uno a su derecha. El derecho más vale uno. Por lo tanto, en binario, las posiciones de dígitos de derecha a izquierda valen 1, 2, 4 y 8. Para decodificar un número, se multiplica cada dígito por el valor de su posición de bit y se suman los resultados. Por ejemplo, 1010 sería 1x8 0x4 1x2 0x1 diez. Esto es exactamente cómo los números se escriben en otras bases, incluyendo decimal. El número decimal 1234 tiene el valor 1x1000 2x100 3x10 4x1. El problema es cómo representar números negativos. Al escribir en decimal, ponemos un signo negativo delante del número. Eso es prácticamente lo que la representación binaria signo-magnitud hace demasiado. Normalmente el bit alto está reservado como bit de signo, con 0 indicando cero o positivo y 1 indicando negativo. El resto de los bits tienen el mismo significado que antes. Por ejemplo, utilizando números de 4 bits de nuevo, 0101 es cinco (1x4 0x2 1x1). Para hacer negativo 5, simplemente establecer el bit de signo resultante en 1101. Así que en el formato de magnitud de signo de 4 bits, el número binario 1101 tiene el valor menos cinco. Lo anterior funciona bien y es muy parecido a lo que hacemos nosotros mismos con decimal, pero no es tan conveniente para implementar con puertas lógicas en una computadora. Hoy en día, el complemento 2s es prácticamente universal dentro de las computadoras. Los números cero y positivo se representan como antes. La diferencia es cómo se representan los números negativos. Una ventaja del complemento 2s es que nada especial necesita ser hecho para agregar números negativos versus números positivos. Piense en qué patrón de bits resultaría en 0000 después de agregar 1 a él. Si se sigue la regla de suma, entonces cualquier número que sea debe ser -1. Esperamos que sepas cómo añadir números binarios, y podemos ver que 1111 0001 resultados en 0000. En realidad resulta en 10000, pero ya que sólo se trata de números de 4 bits, el quinto bit que resulta de la adición se pierde y nos quedan Con los 4 bits bajos 0000. Hay solamente 16 valores posibles que un número binario de 4 pedacitos puede representar, y si está usando el esquema del complemento 2s ellos son: Tan quizá usted puede ver que la pregunta que usted hizo es ambigua. Es importante conocer el ancho del número binario que se está utilizando. Por ejemplo, si la pregunta está suponiendo números de 4 bits como mi ejemplo anterior, entonces 11 (asumida como 0011 con los ceros iniciales no mostrados) es tres. Lo mismo es cierto para un ancho de bit de 3 o más. Si es sólo 2 bits, entonces sólo hay 4 valores posibles que un número puede expresar. Esta es tu tarea, así que no voy a darte la respuesta. Una buena manera de proceder sería hacer una tabla de todos los posibles números binarios de 2 bits y sus equivalentes decimales como lo hice anteriormente, pero tanto para el complemento 2s como para la magnitud de signo. Si muestra al menos un intento razonable, podemos discutirlo más a fondo. Un número de signo de dos bits no puede representar -3 en complemento de dos o en magnitud de signo. Twos complemento tiene un valor negativo adicional (que no tiene aditivo inverso). La magnitud de la señal tiene dos ceros. Ahora veamos tu pregunta. Ningún patrón de bits distinto de cero puede tener valor negativo en una representación y un valor positivo en la otra. En ambas representaciones, el bit alto funciona como un signo negativo. Por lo tanto, las respuestas 2 y 4 no pueden ser respuestas correctas para cualquier patrón de bits. Además, ningún patrón de bits puede tener el mismo valor negativo en ambas representaciones. Un patrón de bits no puede ser -3 en complemento de dos y -3 en complemento de uno. Así que la respuesta 3 también es imposible. (Prueba: dos complementos -3, en cualquier ancho, termina en 01: 101, 1101, 11101. pero una magnitud de signo -3 debe terminar en 11: 111, 1011, 10011.) La única respuesta correcta posible para algún patrón de bits Es 1: Sin embargo, no es la respuesta correcta para el patrón de bits dado 11. La situación descrita en 1 es posible y se ajusta al patrón de bits 1111 bajo una aritmética de cuatro bits. Este número es -3 en la magnitud de cuatro signos de bit, y -1 en cuatro bits dos complementos. La pregunta debe tener un error tipográfico, o lo ha copiado mal. Si una guía de solución que está buscando da C como la solución para una pregunta de opción múltiple cuyas respuestas se indican numéricamente, es probable que esté mirando la guía de solución incorrecta. Sección incorrecta, capítulo incorrecto, libro de texto equivocado. Esto parece un error improbable. M La magnitud de signo utiliza el bit más significativo para denotar el signo. 0 es generalmente positivo, 1 negativo. Con un número de 2 bits como 0b11, el bit de signo lo hace negativo con sólo 2 valores posibles para la magnitud: 0 y 1. En este caso, sería -1. Pero esto no es una opción. Realmente creo que querían preguntar El número binario 0b111 representa. Esto tendría más sentido, ya que 0b111 sería negativo, con una magnitud de 3 para la forma de la magnitud del signo. O -3, que es una de las opciones. Twos complemento es un poco más complicado, pero no mucho. Twos complemento utiliza el bit de mayor orden para denotar la negatividad también. La magnitud de un número negativo se encuentra complementando el número (0b111 se convierte en 0b000, 0b101 se convertiría en 0b010) y la adición de 1. Esto suena tonto, pero hace la adición de números firmados muy simple, no requiere lógica adicional. La magnitud de un número positivo (con el bit más significativo 0) es simplemente el número. Así que el número es (Im asumiendo) 0b111, por lo que es negativo. Complementarlo y agregar uno rinde 0b000, luego 0b001, por lo que su negativo y su magnitud es 1, por lo que su -1. Asi que. A menos que esté completamente equivocado, y podría estar considerando que no he hecho esto a mano por un tiempo, la respuesta es (1), no (3) (o C) como usted sugirió. Pero como la pregunta que escribiste era obviamente incorrecta, todo podría estar equivocado. Sólo tengo que preguntar qué libro es esto. Respondió May 20 12 at 19:28 Usted está mezclando el concepto de números binarios con la forma muy específica en que están representados en el lenguaje C de la computadora. Si va a usar una convención de lenguaje específica que no tiene nada que ver con la pregunta, debería al menos indicarla claramente. Ndash Olin Lathrop May 20 12 at 19:46 UM está usando el prefijo 0b para denotar un número binario. AFAIK esto no es válido C (aunque es aceptado por algunos compiladores). Ndash Wouter van Ooijen 20 de mayo a las 20:49 Wouter: A pesar de que vino de C, pero el punto es que es específico de un lenguaje informático en particular, no las matemáticas en general, de la que trata esta pregunta. Por ejemplo, en Apollo Domain Pascal escribirías 2101 para el valor 5 en binario, pero no usaría eso para responder a una pregunta, a menos que fuera sobre ese lenguaje o definí la convención que estaba usando. Ndash Olin Lathrop May 20 12 at 21: 13decbin Una función rápida para convertir una cadena binaria en una función de secuencia de bits BinString2BitSequence (mystring) mybitseq end strlen (mystring) para (i 0 i lt end i) mybyte decbin (ord (mystring i) ) // convertir char a bit string mybitseq. Substr (00000000. 0. 8 - strlen (mybyte)). Mybyte // Retorno de 8 bits retornado mybitseq echo BinString2BitSequence (ABCDEF) // OUTPUT010000010100001001000011010001000100010101000110 Conversión decimal a binaria utilizando la extensión BCMath. Función BCDec2Bin (Entrada) Salida si (pregmatch (/ d /. Entrada)) mientras que (Entrada 0) Salida. Chr (48 (Entrada 2)) Entrada BCDiv (Entrada 2) Salida strrev (Salida) retorno (Salida (Salida) 0) Esto simplemente convertir de Base-10 a Base-2 usando BCMath (cálculo de precisión arbitraria). Véase también: mi función BCBin2Dec en el documento bindec. Disfruta, Nitrógeno. Hola gente, luché por un día para obtener un gran número decimal convertido en binario, en la plataforma de Windows. Finalmente con bcmath funciones esto es lo que funcionó para mí. // lo consiguió para trabajar con las funciones de bcmath, trabajos para 64 pedacito en las máquinas de la ventana de 32 pedacitos finished0 base2 binnr if (pregmatch (/ 0-9 /, cadena)) para (i0 stringchr (i) i) decnri else decnrstring // while (Decnrgtbase) mientras que (bccomp (decnr, base) 1) // if ((decnr-base) gt0) if (bccomp (bcsub (decnr, base) Binnr.1 // basebase / 2 basebcdiv (base, 2) // elseif ((decnr-base) lt0) elseif (bccomp (bcsub (decnr, base) 0) -1) binnr.0 // basebase / 2 basebcdiv (Base, 2) // elseif ((decnr-base) 0) elseif (bccomp (bcsub (decnr, base)) 0) binnr.1 finished1 // while (basegt1) mientras que (bccomp (base, 1) 1 ) Binnr.0 // basebase / 2 basebcdiv (base, 2) AQUÍ puedes convertir 64bit en lugar de 32bit con el decbin estándar lt función bigdecbin (dec, doublewords1) erg do rest dec2147483648 if (restlt0) rest2147483648 strpad erg (decbin ), 31,0, STRPADLEFT).erg dec (dec-rest) / 2147483648 mientras que ((decgt0) ampamp ((declt1))) echo ltpregt para (i1.52147483647.0-10ilt1.52147483647.010i) eco DEC:.i. BIN:.bigdecbin (i, 2).ltbrgt echo lt / pregt gt ltphp Función bindecValues ​​(1023) function bindecValues ​​(decimal, reverse false, inverse false) / 1. Esta función toma un decimal, lo convierte en binario y devuelve el decimal Valores de cada valor binario individual (a 1) en la cadena binaria. Puede utilizar valores decimales mayores si los pasa a la función como una cadena 2. El segundo parámetro opcional invierte la salida. 3. El tercer parámetro opcional invierte la cadena binaria, por ejemplo, 101 se convierte en 010. - darkshad3 en yahoo punto com / bin decbin (decimal) if (inverso) bin strreplace (0.x. bin) bin strreplace (1. 0. bin ) Bin strreplace (x 1. bin) strlen total (bin) para (i 0 i lt total i) if (bin 0) bin2 strpad (bin, total - 0) arraypush . Rsort (stock): tipo (stock) return implosion (,. Stock) gt El resultado impreso es. 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 Creo que esta es la mejor función. Es casi infinita (hasta 250 o algo) mientras que (i gt 0) si (int - pow (2. i) lt 0) binair 0. binair else binair 1. binair int int - pow (2. i) getal GET getal Cuidado Intentar pruebas binarias con enteros: FFFFFFFF comando: php - r print (decbin (4294967295).n) resultado: 11111111111111111111111111111111 C3E9CAC8 comando: php - r print (decbin (3286878920).n) resultado: 11000011111010011100101011001000 independientemente de especificar (int) , Con el bit a bit AND: comando: php - r print ((int) (3286878920 amp 4294967295).n) resultado: -1008088376 (int) ahora el resultado esperado sucederá (suponga el impacto de rendimiento) comando: php - r print (bindec Nota: si usted bit a bit y algunos bits aleatorios con una secuencia de 1-bit de la misma longitud, el resultado esperado es la misma secuencia de bits aleatorios (decbin (3286878920 amp 4294967295))).) Resultado: 3286878920 sin alterar. Si desea mantener esto en el mundo entero para comparaciones más rápidas, corre el riesgo de desordenar el resultado de la limitación de tamaño entero firmada. El valor máximo que puede utilizar para el resultado deseado es (7FFFFFFF o entero 2147483647), la mitad del valor máximo entero no firmado de 32 bits (dependiente de la plataforma).

No comments:

Post a Comment