"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Blog semanal: cuatro cosas interesantes que encontré esta semana

Blog semanal: cuatro cosas interesantes que encontré esta semana

Publicado el 2024-11-08
Navegar:596

1. Evitar nombres de archivos confusos en VS Code

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.

Weekly Blog: Four Interesting Things I Encountered This Week

Subtítulo: ¡Qué tonto!

  • Solución: En el archivo task.json, cambie la línea de 'comando' de gcc a g .
  • Lección aprendida: Utilice extensiones .cpp claras para archivos C para evitar confusiones innecesarias.

2. Filosofía de diseño multiplataforma de Java

La filosofía de diseño de Java difiere significativamente de los lenguajes compilados tradicionales:

Compilación Tradicional:

  1. Lenguajes como C se compilan directamente en código máquina para propósitos específicos. plataformas (por ejemplo, Windows, Mac, Linux)
  2. Los archivos ejecutables resultantes (.exe) solo pueden ejecutarse en la plataforma de destino

El enfoque de Java:

  1. El compilador genera código intermedio (código de bytes)
  2. Este código de bytes se puede ejecutar en cualquier plataforma con una máquina virtual Java (JVM) instalada
  3. La JVM es responsable de traducir el código de bytes a código de máquina para la plataforma actual

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

3. Dos modos de compilación comunes

  • El modo de depuración está orientado a la depuración, con menos optimizaciones. Se utiliza principalmente para depurar programas.
  • El modo de lanzamiento se utiliza principalmente para generar la versión de lanzamiento, enfocándose en la optimización y conservando solo la funcionalidad de depuración básica.

Weekly Blog: Four Interesting Things I Encountered This Week

4. Comprender la conversión de tipos forzados desde una perspectiva de bajo nivel

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.

Un juego divertido para comprender el lanzamiento de tipos forzados

¡Mi experimento favorito para introducir la conversión de tipos!

# include 
int 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.

Explicación

  1. (char*)&a apunta al primer byte del int. El primer byte 11001101 se interpreta como un carácter.
  2. El bit 1 más alto indica un número negativo, después de la conversión en complemento a dos, obtenemos -51 (aquellos amigos que estén familiarizados con el complemento a dos pueden verificar si efectivamente representa -51)

¿Es esto una coincidencia? Probemos dos ejemplos más

printf("%d\n",*(q 1));
printf("%d\n",*(q 2));

Pruébalo:

  1. Intenta ejecutar el código mencionado anteriormente y observa el resultado.
  2. Considere por qué el segundo y tercer bytes producen tal resultado. No dudes en comentar esto en la sección de comentarios.
  3. ¿Se puede aplicar la conversión de tipos forzada a otros tipos de datos? ¡Probar!

Información adicional: complemento a dos

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?

Beneficios del complemento a dos:

  1. Permite calcular tipos tanto positivos como enteros usando solo un sumador, eliminando la necesidad de un restador y simplificando la necesidad de hardware.
  2. Proporciona una representación binaria única para el cero. 10000000 no representa -0, sino -128, mientras que 00000000 representa 0, no 0.

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.

Declaración de liberación Este artículo se reproduce en: https://dev.to/stockdale_roger_999e292a7/weekly-blog-four-interesting-things-i-encountered-this-week-eo9?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

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