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

97
Vistas
Programa C que produce diferentes resultados en diferentes máquinas a pesar de usar los mismos tipos de datos de longitud fija

Programa simple que hice cuando estaba experimentando con inttypes.h:

 #include <stdio.h> #include <stdbool.h> #include <inttypes.h> bool get_bit(uint32_t x, uint8_t n) { x >>= n; return x & 1; } int main() { uint32_t x; uint8_t n; printf ("Enter x: "); scanf("%"SCNu32, &x); printf ("Enter n: "); scanf("%"SCNu8, &n); printf("The %"PRIu8"th bit of %"PRIu32" is: %d", n, x, get_bit(x, n)); return 0; }

En mi teléfono (64 bit octa core ARN LTE Soc Android 10) funciona bien:

 Enter x: 1 Enter n: 0 The 0th bit of 1 is: 1

Pero en mi computadora (64 bit x86 Windows 10) obtengo:

 Enter x: 1 Enter n: 0 The 0th bit of 0 is: 0

Cambiar bool a uint8_t no lo afecta.

EDITAR: Intenté compilar con MinGW-w64 GCC C99 y C17.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Parece que puede tener este problema en caso de que esté usando un compilador de Windows que use la biblioteca CRT (no) estándar no compatible de Microsoft. Es decir: Visual Studio o Mingw64/gcc.

Puedo reproducirlo en Mingw/gcc. Es un problema bien conocido que Microsoft CRT no funciona y, por ejemplo, no es compatible con varios especificadores de formato introducidos en C99. Parecería que el problema radica en la lectura de scanf con el especificador de formato incorrecto, porque al compilar con todas las advertencias habilitadas, obtengo:

advertencia: carácter de tipo de conversión desconocido 'h' en formato [-Wformat=]

%hh es lo que se encuentra debajo del capó de SCNu8 pero el compilador solo lee hasta %h y se detiene allí. La llamada scanf realmente falla.

Puede descifrar la biblioteca CRT al menos en Mingw usando lo siguiente:

 #define __USE_MINGW_ANSI_STDIO 1 #include <stdio.h>

Cuando agregué lo anterior a su código, obtengo The 0th bit of 1 is: 1 .
Sin el parche anterior, obtengo The 0th bit of 0 is: 0

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