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.
Legenda: Que idiota!
A filosofia de design do Java difere significativamente das linguagens compiladas tradicionais:
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
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!
Meu experimento favorito para introduzir a conversão 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); }
Saída:
329933 -51
Estou curioso para saber por que a saída é -51?
Isso é uma coincidência? Vamos tentar mais dois exemplos
printf("%d\n",*(q 1)); printf("%d\n",*(q 2));
Experimente:
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?
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.
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