>웹 프론트엔드 >JS 튜토리얼 >주간 블로그: 이번 주에 만난 네 가지 흥미로운 일

주간 블로그: 이번 주에 만난 네 가지 흥미로운 일

王林
王林원래의
2024-09-08 20:35:03746검색

1. VS Code에서 혼동되는 파일 이름 방지

VS Code에서 C++ 파일을 작성할 때 파일 이름을 first.c.cpp로 지정했습니다. 프로그램을 완료한 후 실행 중에 오류가 발생했습니다. 30분 동안 문제를 해결한 후 다음 파일 이름에 문제가 있음을 발견했습니다.
.c 확장자로 인해 IDE가 이를 C 프로그램으로 잘못 식별하여 VS Code가 g++(C++ 컴파일러) 대신 gcc(C 컴파일러)를 사용하여 코드를 컴파일하게 되었습니다.

Weekly Blog: Four Interesting Things I Encountered This Week

캡션: 정말 바보같아!

  • 해결책: task.json 파일에서 '명령줄'을 gcc에서 g++로 변경합니다.
  • 배운 교훈: 불필요한 혼란을 피하기 위해 C++ 파일에 명확한 .cpp 확장자를 사용하세요.

2. Java의 크로스 플랫폼 디자인 철학

Java의 디자인 철학은 기존의 컴파일 언어와 크게 다릅니다.

전통적인 편집물:

  1. C++와 같은 언어는 특정 용도의 기계어 코드로 직접 컴파일됩니다. 플랫폼(예: Windows, Mac, Linux)
  2. 결과 실행 파일(.exe)은 대상 플랫폼에서만 실행될 수 있습니다

Java의 접근 방식:

  1. 컴파일러는 중간 코드(바이트코드)를 생성합니다
  2. 이 바이트코드는 JVM(Java Virtual Machine)이 설치된 모든 플랫폼에서 실행될 수 있습니다
  3. JVM은 바이트코드를 현재 플랫폼에 맞는 기계어 코드로 변환하는 역할을 담당합니다

이 디자인은 "한 번 작성하면 어디서나 실행"이라는 목표를 달성하는 반면, C++ 실행 파일(.exe 파일)은 단일 플랫폼에서 실행되도록 제한됩니다.

  • 장점:같은 프로그램을 수정하지 않고도 다른 컴퓨터에서 실행할 수 있습니다

  • 단점:프로세스의 추가 단계로 인해 기존 방법에 비해 컴파일 속도가 약간 느려질 수 있습니다

한 번 작성하면 어디서나 실행 가능

                             ---------James Gosling

3. 두 가지 일반적인 컴파일 모드

  • 디버그 모드는 최적화가 덜된 디버깅을 지향합니다. 주로 프로그램 디버깅에 사용됩니다.
  • 릴리스 모드는 주로 릴리스 버전을 생성하는 데 사용되며, 최적화에 중점을 두고 기본적인 디버깅 기능만 유지합니다.

Weekly Blog: Four Interesting Things I Encountered This Week

4. 낮은 수준의 관점에서 강제 형변환 이해하기

Little Endian: 최하위 바이트가 가장 낮은 주소에 저장됩니다. 이 저장 방법은 낮은 주소에서 높은 주소로 발생하는 CPU 메모리 읽기를 용이하게 하기 위해 등장했습니다. 흥미롭게도 이는 인간이 일반적으로 숫자를 쓰는 것과 반대입니다.
:
329933의 이진수 표현은 00000000 00000101 00001000 11001101
리틀 엔디안 저장 : 11001101 00001000 00000101 00000000
보시다시피 Little Endian은 이진 표현에서 바이트 순서를 반대로 바꿉니다. 그러나 각 바이트 내의 비트 순서는 변경되지 않는다는 점에 유의하는 것이 중요합니다!

강제 형변환을 이해하는 재미있는 게임

타입 캐스팅을 소개하면서 제가 가장 좋아하는 실험!

# include 317e6b6395ab75e70e7f0880af8f6835
int main()

{
    int a;

    int *p;

    a=329933;

    p=&a;

    char *q;

    q=(char*)p;

    printf("%d\n",*p);

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

}

출력:

329933
-51

왜 -51이 출력되는지 궁금합니다.

설명

  1. (char*)&a는 int의 첫 번째 바이트를 가리킵니다. 첫 번째 바이트 11001101은 문자로 해석됩니다.
  2. 가장 높은 비트 1은 음수를 나타내며, 2의 보수 변환 후에는 -51을 얻습니다(2의 보수에 익숙한 친구들은 그것이 실제로 -51을 나타내는지 확인할 수 있습니다)

우연일까요? 두 가지 예시를 더 시도해 보겠습니다

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

해 보세요:

  1. 위에 언급된 코드를 실행하고 출력을 관찰해 보세요.
  2. 두 번째 및 세 번째 바이트가 왜 그러한 출력을 생성하는지 생각해 보세요. 댓글 섹션에서 이 문제에 대해 자유롭게 토론해 보세요.
  3. 다른 데이터 유형에 강제 유형 캐스팅을 적용할 수 있나요? 한번 시도해 보세요!

추가 정보: 2의 보수

강제 유형 캐스팅을 수행할 때 (char)p는 4바이트 int의 첫 번째 바이트 주소인 11001101을 가리킵니다.
가장 왼쪽의 1은 음수 기호를 나타내며 음수임을 나타냅니다. 2의 보수를 적용하면 다음을 얻습니다: 0110011(마지막 7비트)

(참고: 양수의 경우 2의 보수는 단순히 십진수를 이진수로 표현한 것입니다. 음수의 경우 2의 보수는 가장 왼쪽(가장 높은) 비트를 제외한 모든 비트를 반전시킨 다음 1을 더하여 얻습니다. 가장 오른쪽 비트로.)

이를 십진수로 변환하면 -51이 됩니다. 흥미롭지 않나요?

2의 보수의 이점:

  1. 가산기만을 사용하여 양수 유형과 정수 유형을 모두 계산할 수 있으므로 뺄셈이 필요 없고 하드웨어 요구 사항이 단순화됩니다.
  2. 0에 대한 고유한 이진 표현을 제공합니다. 10000000은 -0이 아닌 -128을 나타내고, 00000000은 +0이 아닌 0을 나타냅니다.

왜 -128인지 궁금해하시는 분들이 많습니다. 답을 알고 있다면 댓글 섹션에서 자유롭게 공유해 주세요. 이는 다른 사람에게도 도움이 될 뿐만 아니라 자신의 생각을 정리하는 데도 도움이 됩니다.

위 내용은 주간 블로그: 이번 주에 만난 네 가지 흥미로운 일의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.