Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

96
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda