"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Blog semanal: quatro coisas interessantes que encontrei esta semana

Blog semanal: quatro coisas interessantes que encontrei esta semana

Publicado em 2024-11-08
Navegar:485

1. Evitando nomes de arquivos confusos no código VS

Ao escrever arquivos C no VS Code, nomeei um arquivo primeiro como.c.cpp. Após concluir o programa, encontrei erros durante a execução. Após 30 minutos de solução de problemas, descobri que o problema estava no nome do arquivo:
A extensão .c fez com que o IDE o identificasse erroneamente como um programa C, fazendo com que o VS Code usasse gcc (o compilador C) em vez de g (o compilador C) para compilar meu código.

Weekly Blog: Four Interesting Things I Encountered This Week

Legenda: Que idiota!

  • Solução: No arquivo tasks.json, altere a linha de 'comando' de gcc para g .
  • Lição aprendida: Use extensões .cpp claras para arquivos C para evitar confusão desnecessária.

2. Filosofia de design multiplataforma Java

A filosofia de design do Java difere significativamente das linguagens compiladas tradicionais:

Compilação Tradicional:

  1. Linguagens como C são compiladas diretamente em código de máquina para plataformas (por exemplo, Windows, Mac, Linux)
  2. Os arquivos executáveis ​​resultantes (.exe) só podem ser executados na plataforma de destino

Abordagem Java:

  1. O compilador gera código intermediário (bytecode)
  2. Este bytecode pode ser executado em qualquer plataforma com uma Java Virtual Machine (JVM) instalada
  3. A JVM é responsável por traduzir o bytecode em código de máquina para a plataforma atual

Este design atinge o objetivo de "Escrever uma vez, executar em qualquer lugar", enquanto os executáveis ​​C (arquivos .exe) são limitados à execução em uma única plataforma.

  • Vantagens:O mesmo programa pode ser executado em computadores diferentes sem modificação

  • Desvantagens:A etapa adicional no processo pode tornar a compilação um pouco mais lenta em comparação aos métodos tradicionais

Escreva uma vez, execute em qualquer lugar

                             ---------James Gosling

3. Dois modos de compilação comuns

  • O modo de depuração é orientado para depuração, com menos otimizações. É usado principalmente para depuração de programas.
  • O modo de lançamento é usado principalmente para gerar a versão de lançamento, com foco na otimização e mantendo apenas a funcionalidade básica de depuração.

Weekly Blog: Four Interesting Things I Encountered This Week

4. Compreendendo a conversão forçada de tipo de uma perspectiva de baixo nível

Little Endian: O byte menos significativo é armazenado no endereço mais baixo. Esse método de armazenamento surgiu para facilitar a leitura da memória da CPU, que ocorre de endereços baixos para endereços altos. Curiosamente, isso é o oposto do que os humanos normalmente escrevem números.
Por exemplo:
A representação binária de 329933 é 00000000 00000101 00001000 11001101
Armazenamento Little Endian: 11001101 00001000 00000101 00000000
Como podemos ver, Little Endian inverte a ordem dos bytes na representação binária. No entanto, é crucial observar que a ordem dos bits dentro de cada byte permanece inalterada!

Um jogo divertido para entender a conversão forçada de tipos

Meu experimento favorito para introduzir a conversão 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);

}

Saída:

329933
-51

Estou curioso para saber por que a saída é -51?

Explicação

  1. (char*)&a aponta para o primeiro byte do int. O primeiro byte 11001101 é interpretado como um caractere.
  2. O bit 1 mais alto indica um número negativo, após a conversão do complemento de dois, obtemos -51 (aqueles amigos que estão familiarizados com o complemento de dois podem verificar se ele realmente representa -51)

Isso é uma coincidência? Vamos tentar mais dois exemplos

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

Experimente:

  1. Tente executar o código mencionado acima e observe o resultado.
  2. Considere por que o segundo e o terceiro bytes produzem tal saída. Sinta-se à vontade para discutir isso na seção de comentários.
  3. Você pode aplicar conversão de tipo forçada a outros tipos de dados? Experimente!

Informações Adicionais: Complemento de Dois

Ao realizar a conversão de tipo forçada, (char)p apontará para o endereço do primeiro byte do int de quatro bytes, que é 11001101.
O 1 mais à esquerda representa o sinal negativo, indicando que é um número negativo. Após aplicar o complemento de dois, obtemos: 0110011 (os últimos 7 bits)

(Nota: Para números positivos, o complemento de dois é simplesmente a representação binária do número decimal. Para números negativos, o complemento de dois é obtido invertendo todos os bits, exceto o bit mais à esquerda (mais alto), e depois adicionando 1 para o bit mais à direita.)

Converter isso para decimal nos dá -51. Interessante, certo?

Benefícios do Complemento de Dois:

  1. Ele permite que tipos positivos e inteiros sejam calculados usando apenas um somador, eliminando a necessidade de um subtrator e simplificando a necessidade de hardware.
  2. Ele fornece uma representação binária exclusiva para zero. 10000000 não representa -0, mas -128, enquanto 00000000 representa 0, não 0.

Muitas pessoas se perguntam por que é -128. Se você souber a resposta, sinta-se à vontade para compartilhá-la na seção de comentários. Isso não apenas ajudará outras pessoas, mas também ajudará você a organizar seus pensamentos.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/stockdale_roger_999e292a7/weekly-blog-four-interesting-things-i-encountered-this-week-eo9?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3