Al escribir archivos C en VS Code, primero nombré un archivo.c.cpp. Después de completar el programa, encontré errores durante la ejecución. Después de 30 minutos de solución de problemas, descubrí que el problema estaba en el nombre del archivo:
La extensión .c llevó al IDE a identificarlo erróneamente como un programa C, lo que provocó que VS Code usara gcc (el compilador de C) en lugar de g (el compilador de C) para compilar mi código.
Subtítulo: ¡Qué tonto!
La filosofía de diseño de Java difiere significativamente de los lenguajes compilados tradicionales:
Este diseño logra el objetivo de "Escribir una vez, ejecutar en cualquier lugar", mientras que los ejecutables de C (archivos .exe) se limitan a ejecutarse en una única plataforma.
Ventajas:El mismo programa puede ejecutarse en diferentes computadoras sin modificaciones
Desventajas:El paso adicional en el proceso puede hacer que la compilación sea un poco más lenta en comparación con los métodos tradicionales
Escribe una vez, ejecuta en cualquier lugar
---------James Gosling
Little Endian: el byte menos significativo se almacena en la dirección más baja. Este método de almacenamiento surgió para facilitar la lectura de la memoria de la CPU, que se produce desde direcciones bajas a altas. Curiosamente, esto es lo opuesto a lo que los humanos suelen escribir con números.
Por ejemplo:
La representación binaria de 329933 es 00000000 00000101 00001000 11001101
Almacenamiento Little Endian: 11001101 00001000 00000101 00000000
Como podemos ver, Little Endian invierte el orden de los bytes en la representación binaria. Sin embargo, es fundamental tener en cuenta que el orden de los bits dentro de cada byte permanece sin cambios.
¡Mi experimento favorito para introducir la conversión de tipos!
# includeint main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
Producción:
329933 -51
Tengo curiosidad por saber por qué genera -51.
¿Es esto una coincidencia? Probemos dos ejemplos más
printf("%d\n",*(q 1)); printf("%d\n",*(q 2));
Pruébalo:
Al realizar la conversión de tipo forzada, (char)p apuntará a la dirección del primer byte del int de cuatro bytes, que es 11001101.
El 1 más a la izquierda representa el signo negativo, lo que indica que es un número negativo. Después de aplicar el complemento a dos, obtenemos: 0110011 (los últimos 7 bits)
(Nota: para números positivos, el complemento a dos es simplemente la representación binaria del número decimal. Para números negativos, el complemento a dos se obtiene invirtiendo todos los bits excepto el bit más a la izquierda (el más alto) y luego sumando 1 hacia el extremo derecho.)
Convertir esto a decimal nos da -51. Interesante, ¿verdad?
Mucha gente se pregunta por qué es -128. Si conoce la respuesta, no dude en compartirla en la sección de comentarios. Esto no solo ayudará a los demás sino que también te ayudará a organizar tus pensamientos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3