Hay alguna manera de que me estoy perdiendo dentro de Excel para establecer el verdadero número de bits en un número binario, o estamos atascados con los 10 bits DEC2BIN y BIN2DEC? 10-bit es una elección extraña.

Yo, idealmente, quieres ser capaz de elegir entre una verdadera firmado de 8 bits o de un verdadero signo de 16 bits mundo, y ser capaz de realizar operaciones con los números. Tal como está ahora, yo no se puede establecer 11111111 ser -1 en lugar de 255. Ha nadie lidiado con esto?

Gracias de antemano.

  • Si quieres hacer operaciones en los números, usted tendrá que trabajar con el «decimal» versiones. Las versiones binarias son sólo cadenas de «0» y «1» de los personajes.
  • La vergüenza en Excel para esta limitación. Probablemente sea un problema de compatibilidad con versiones antiguas. Me costó más de lo mismo en LibreOffice que, obviamente, se intenta ser lo más compatible posible – también con tales limitaciones
  • Pequeña aclaración. 10 caracteres y no de 10 bits. El número es un 40 bits número y no de 8, 16, 32 o 64 estándar entero.
  • En termw de la nomenclatura, los datos se almacena como una cadena, probablemente en Unicode. Pero está diseñado para representar bits y 10 bits es el modelo que yo estaba tratando de alejarse de. También, no entiendo donde el número 40 del vino.
  • I. Usted tiene razón: la confusión surge porque he buscado en la función HEX2DEC y mi comentario era más general que el tema. En BIN2DEC diez caracteres significa diez bits, pero en hexadecimal diez caracteres media de 40 bits. La limitación de excel, de 10 caracteres es común a todas las funciones de conversión. La longitud máxima de la cadena HEXADECIMAL es de 10 caracteres, cada uno de los dos caracteres son un byte que significa 5 bytes = 40 bits, Si convertir 8000 0000 usted no recibe un número negativo como se puede esperar. Sólo los números hexadecimales mayor o igual a 80 0000 0000 se convierten en negativos los números decimales.
InformationsquelleAutor Ben I. | 2015-01-09

5 Comentarios

  1. 5

    Excel impone un 10 límite de caracteres en binario, octal y hexadecimal los números. Para binario, esto coincide con un 10-bit de límite. Este límite tiene poco sentido, y supongo que fue una decisión arbitraria que cada versión de Excel se mantiene por compatibilidad con versiones anteriores.

    De 8 bits en complemento a dos:

    =LEFT(A1)*-128 + BIN2DEC(MID(A1,2,7))
    

    Trabajar con números con signo distinto de 10 bits en Excel

    De 16 bits binario, convertir cada mitad del número binario a hexadecimal y concatenar. Usted puede alimentar a ese resultado a HEX2DEC. Luego puede manejar complemento a dos, como hicimos nosotros, para 8 bits:

    =LEFT(A1)*-32768 + HEX2DEC(BIN2HEX(MID(A1,2,7),2) & BIN2HEX(MID(A1,9,8),2))
    

    Trabajar con números con signo distinto de 10 bits en Excel

    • La concatenación de los dos BIN2HEX resultados de la falla si los últimos ocho bits son 0 (el resultado es 0, no 00). Debe utilizar HEX2DEC(BIN2HEX(MID(A1,2,7),2) & BIN2HEX(MID(A1,9,8),2))
    • Gracias, @EBlake.
  2. 1

    Con bit de signo+siete bits de datos en A1

    =IF(LEFT(A1,1)="1",BIN2DEC(MID(A1,2,9999))-128,BIN2DEC(MID(A1,2,9999)))
    

    Por ejemplo:

    Trabajar con números con signo distinto de 10 bits en Excel

    • Gracias. Eso es un acercamiento inteligente! No estoy seguro de cómo se aplicaría a 16 bits, aunque, dado que BIN2DEC está limitado a 10 bits.
    • Gracias por los comentarios!
  3. 1

    DEC2BIN y BIN2DEC de trabajo con 10 bits de números con signo, es decir, -512 través 511.

    Sin embargo, la representación binaria devuelto por DEC2BIN es una cadena de caracteres.

    DEC2BIN(7) devuelve «111», no 111.

    Si tratas de hacer matemáticas, con el consiguiente número binario, que es tratada como cualquier cadena que se utiliza en un contexto numérico: es convertida a partir de una cadena a un número de base 10.

    DEC2BIN(7+1) devuelve «1000», pero DEC2BIN(7)+1 devuelve 112. (es decir,»111″ + 1)

    BIN2DEC(99+12) devuelve 7. (internamente hay tres pasos: 99+12 -> 111 -> «111» -> 7.)

    Para sus necesidades, recomiendo evitar DEC2BIN y BIN2DEC, y realizar las conversiones utilizando sus propias funciones de VBA, tales como: http://www.vb-helper.com/howto_decimal_to_binary.html

    Podría mejorar estas funciones con argumentos adicionales para especificar signed/unsigned y 8/16/32 bits, y para volver NaN o un error en binario de desbordamiento.

    El VBA «de Largo» el tipo de datos es de 64 bits entero con signo (alrededor de 18 dígitos decimales), pero usted no será capaz de tomar ventaja de la que va a/desde Excel, el cual se encarga de 15 dígitos, sin pérdida de precisión.

    VBA «Largo» va a tener ningún problema con el de 32 bits sin signo.

    >>>EDITAR Corrección: VBA Largo es de 32 bits entero con signo.

    VBA Doble tiene un 52 bits de mantisa, por lo que puede utilizarse durante al menos 48-bit firmado aritmética de enteros, sin pérdida de precisión.

  4. 1

    solo repita el primer bit:

    para 32 bits a 40 bits

    HEX2DEC(
       IF(LEFT(HEX2BIN([@DH6]),1)="1","FF","") 
       &[@DH6]
       &[@DH5]
       &[@DH4]
       &[@DH3]
    )
    
  5. 0

    Que la fórmula no funciona.

    Probar la fórmula con 10000000.
    La «Real» de respuesta es de 384, pero la fórmula de la respuesta es 768 que es 100000000.
    No sé lo que está mal con esa fórmula en particular?

    He encontrado una fórmula que funciona:

    =SUMPRODUCT(--MID(Z24,LEN(Z24)+1-ROW(INDIRECT("1:"&LEN(Z24))),1),(2^(ROW(INDIRECT("1:"&LEN(Z24)))-1)))
    
    • Que la fórmula es «que la fórmula»?
    • =IZQUIERDA(A1)*-32768 + HEX2DEC(BIN2HEX(MID(A1,2,7),2) & BIN2HEX(MID(A1,9,8),2)) he intentado utilizar la fórmula, luego descubrí que no funcionó. He encontrado otra fórmula y funcionó, así que pensé que iba a publicar lo que he encontrado.
    • No 10000000 ser 256 o -128? ¿Dónde 384 vienen?
    • Su derecho. Me perdí la parte firmada.

Dejar respuesta

Please enter your comment!
Please enter your name here