Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

200
Vistas
¿Cómo puedo imprimir números binarios dentro de matrices?

Estoy tratando de imprimir números binarios en lenguaje C. Tengo un problema con los números binarios que comienzan con 0. Cuando intentas mantenerlo en las matrices e intentas imprimirlo, aparecen números aleatorios, cuando ingresas con scanf, el cero inicial del número desaparece.

¿Que debería hacer en esta situación? Gracias de antemano por su ayuda.

 int main(){ int binarys[3] ={01001001, 01100110, 00100000}; size_t i; for(i=0; i<3; i++) { printf("%d\n", binarys[i]); } int binary; printf("Enter a binary: "); scanf("%d", &binary); printf("%d", binary); }

Producción:

 262657 294984 32768 Enter a binary: 01001001 1001001
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Literales enteros:

En C y C++, un literal entero que comienza con 0 significa que se representa en octal (base 8).

Por lo tanto, la matriz de int s que ha inicializado contiene los valores octales de 1001001, 1100110, 100000, que son 262657, 294984, 32768 respectivamente.

Los literales binarios están disponibles en C++ desde C++ 14. Se supone que C lo admite en C23 (consulte: https://en.cppreference.com/w/c/language/integer_constant ).

En este ejemplo de código:

 int main() { int a = 010; printf("%d\n", a); int b = 0b10; printf("%d\n", b); }

Se imprimirá lo siguiente (C++ 14):

 8 2

Porque 8 es el valor decimal del 10 octal y 2 es el valor decimal del 10 binario.

El problema con scanf :

scanf analiza el valor ingresado como un int decimal (ya que especificó el especificador de formato %d ). No aplica las reglas literales del lenguaje. Por lo tanto, se ignora el 0 inicial que no tiene significado matemático. Ingresó 01001001 , que se analiza como el int decimal con valor 1001001 y eso es lo que ve en el printf que sigue (que nuevamente usa el especificador de formato %d ).

over 4 years ago · Santiago Trujillo Denunciar

0

Tengo un problema con los números binarios que comienzan con 0

Las constantes enteras que comienzan con 0 no son binarias sino octales.

Si tienes un compilador que ofrece el prefijo 0b como extensión (o vienes del futuro donde esto ha sido estandarizado) y quieres declarar un entero con el valor 32, en base dos por el motivo que sea, escribe 0b00100000 . Sin embargo, seguirá teniendo exactamente el mismo contenido que si acabara de escribir 32 , porque una base es la forma en que se representa un número y no afecta su valor.

cuando obtienes entrada con scanf,

La función scanf no tiene un especificador de conversión para binario, y %d significa explícitamente decimal , es decir, base 10.

Si desea escanear números escritos en binario, deberá leer una cadena, confirmar que solo son unos y ceros y convertirla usted mismo (es decir, usar strtol como strol(str, &end, 2) ).

... el cero inicial del número desaparece

Los ceros iniciales no se imprimen de forma predeterminada.

Nuevamente, printf no tiene un especificador de conversión binaria de todos modos, pero si desea imprimir ceros a la izquierda, debe establecer un ancho de campo y solicitar un relleno de cero, como %08d .

Si desea imprimir números en binario, primero debe convertirlos en una cadena.

over 4 years ago · Santiago Trujillo Denunciar

0

C no admite (todavía) constantes enteras binarias o especificadores de conversión scanf/print para binario. Se ha propuesto para el próximo estándar C "C23". Hasta entonces, el prefijo 0b y los especificadores de conversión %b pueden ser admitidos por algunos compiladores como extensiones no estándar ( 0b muy probable, %b no tan probable).

Los números que comienzan con 0 son en realidad constantes enteras octales. De cualquier manera, imprimir/leer alguna constante entera 01001001 usando %d no tiene sentido.

Con el estándar C actual, podría preparar una conversión en tiempo de compilación usando un montón de macros ciertamente feas:

 #include <stdio.h> #define STATIC_ASSERT(expr) (int [expr]){0} #define STR_TO_BIN(str) ( (str[0]-'0') * 128 + \ (str[1]-'0') * 64 + \ (str[2]-'0') * 32 + \ (str[3]-'0') * 16 + \ (str[4]-'0') * 8 + \ (str[5]-'0') * 4 + \ (str[6]-'0') * 2 + \ (str[7]-'0') * 1 ) #define BINARIFY(n) (STATIC_ASSERT(sizeof(#n)==9), STR_TO_BIN(#n)) int main(){ int binaries[3] ={BINARIFY(01001001), BINARIFY(01100110), BINARIFY(00100000)}; for(size_t i=0; i<3; i++) { printf("%d\n", binaries[i]); } }

(La "afirmación estática del hombre pobre" protege contra el acceso fuera de los límites de la matriz, pero no contra los formatos de entrada incorrectos).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda