ホームページ > ウェブフロントエンド > jsチュートリアル > 週刊ブログ: 今週出会った 4 つの興味深いこと

週刊ブログ: 今週出会った 4 つの興味深いこと

王林
リリース: 2024-09-08 20:35:03
オリジナル
715 人が閲覧しました

1. VS Code でのファイル名の混乱を避ける

VS Code で C++ ファイルを作成するとき、最初にファイルに .c.cpp という名前を付けました。プログラムが完了した後、実行中にエラーが発生しました。 30 分間のトラブルシューティングの後、次のファイル名に問題があることがわかりました:
.c 拡張子により、IDE がそれを C プログラムとして誤って認識し、VS Code がコードをコンパイルするために g++ (C++ コンパイラー) ではなく gcc (C コンパイラー) を使用するようになりました。

Weekly Blog: Four Interesting Things I Encountered This Week

キャプション: なんと愚かなのだろう!

  • 解決策:tasks.json ファイルで、「コマンド」ラインを gcc から g++ に変更します。
  • 教訓: 不必要な混乱を避けるために、C++ ファイルには明確な .cpp 拡張子を使用してください。

2. Java のクロスプラットフォーム設計哲学

Java の設計哲学は、従来のコンパイル言語とは大きく異なります。

従来のコンピレーション:

  1. C++ などの言語は、特定の目的のために直接マシンコードにコンパイルされます。 プラットフォーム (例: Windows、Mac、Linux)
  2. 結果の実行可能ファイル (.exe) は、ターゲット プラットフォームでのみ実行できます

Java のアプローチ:

  1. コンパイラは中間コード (バイトコード) を生成します
  2. このバイトコードは、Java 仮想マシン (JVM) がインストールされている任意のプラットフォームで実行できます
  3. JVM はバイトコードを現在のプラットフォームのマシンコードに変換する役割を果たします

この設計は「一度書いたらどこでも実行できる」という目標を達成しますが、C++ 実行可能ファイル (.exe ファイル) は単一のプラットフォームでの実行に限定されます。

  • 利点:同じプログラムを変更せずに異なるコンピュータで実行できます

  • 欠点:プロセスに追加のステップがあるため、従来の方法と比べてコンパイルが若干遅くなる可能性があります

一度書けばどこでも実行可能

                             ---------James Gosling
ログイン後にコピー

3. 2 つの一般的なコンパイル モード

  • デバッグ モードはデバッグを目的としており、最適化はほとんどありません。主にプログラムのデバッグに使用されます。
  • リリース モードは主にリリース バージョンの生成に使用され、最適化に重点を置き、基本的なデバッグ機能のみを保持します。

Weekly Blog: Four Interesting Things I Encountered This Week

4. 低レベルの観点からの強制型キャストの理解

リトルエンディアン: 最下位バイトは最下位アドレスに格納されます。この記憶方法は、下位アドレスから上位アドレスに向かって行われる CPU メモリの読み取りを容易にするために登場しました。興味深いことに、これは人間が通常数字を書くのとは逆です。
:
329933 のバイナリ表現は 00000000 00000101 00001000 11001101
リトルエンディアンストレージ: 11001101 00001000 00000101 00000000
見てわかるように、リトル エンディアンはバイナリ表現のバイトの順序を逆にします。ただし、各バイト内のビット順序は変更されないことに注意することが重要です。

強制型キャストを理解するための楽しいゲーム

型キャストを導入するための私のお気に入りの実験です!

# include <iostream>
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 を表すかどうかを確認できます)

これは偶然でしょうか?さらに 2 つの例を試してみましょう

printf("%d\n",*(q+1));
printf("%d\n",*(q+2));
ログイン後にコピー

試してみましょう:

  1. 上記のコードを実行して、出力を観察してください。
  2. 2 番目と 3 番目のバイトがそのような出力を生成する理由を考えてください。 コメントセクションでお気軽にご相談ください。
  3. 強制的な型キャストを他のデータ型に適用できますか?ぜひ試してみてください!

追加情報: 2 の補数

強制的な型キャストを実行すると、(char)p は 4 バイト int の最初のバイトのアドレス (11001101) を指します。
一番左の 1 は負の符号を表し、負の数であることを示します。 2 の補数を適用すると、0110011 (最後の 7 ビット)

が得られます。

(注: 正の数の場合、2 の補数は単に 10 進数の 2 進表現です。負の数の場合、2 の補数は、左端 (最上位) ビットを除くすべてのビットを反転し、1 を加算することによって取得されます。 )

これを 10 進数に変換すると、-51 になります。面白いですよね?

2 の補数の利点:

  1. 加算器のみを使用して正の型と整数型の両方を計算できるため、減算器の必要性がなくなり、ハードウェアの必要性が簡素化されます。
  2. ゼロの一意のバイナリ表現を提供します。 10000000 は -0 ではなく -128 を表し、00000000 は +0 ではなく 0 を表します。

なぜ -128 なのか疑問に思う人は多いでしょう。答えがわかったら、コメント欄でお気軽に共有してください。これは他の人を助けるだけでなく、自分の考えを整理するのにも役立ちます。

以上が週刊ブログ: 今週出会った 4 つの興味深いことの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート