VS Code で C++ ファイルを作成するとき、最初にファイルに .c.cpp という名前を付けました。プログラムが完了した後、実行中にエラーが発生しました。 30 分間のトラブルシューティングの後、次のファイル名に問題があることがわかりました:
.c 拡張子により、IDE がそれを C プログラムとして誤って認識し、VS Code がコードをコンパイルするために g++ (C++ コンパイラー) ではなく gcc (C コンパイラー) を使用するようになりました。
キャプション: なんと愚かなのだろう!
Java の設計哲学は、従来のコンパイル言語とは大きく異なります。
この設計は「一度書いたらどこでも実行できる」という目標を達成しますが、C++ 実行可能ファイル (.exe ファイル) は単一のプラットフォームでの実行に限定されます。
利点:同じプログラムを変更せずに異なるコンピュータで実行できます
欠点:プロセスに追加のステップがあるため、従来の方法と比べてコンパイルが若干遅くなる可能性があります
一度書けばどこでも実行可能
---------James Goslingログイン後にコピー
リトルエンディアン: 最下位バイトは最下位アドレスに格納されます。この記憶方法は、下位アドレスから上位アドレスに向かって行われる 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 が出力されるのか不思議です?
これは偶然でしょうか?さらに 2 つの例を試してみましょう
printf("%d\n",*(q+1)); printf("%d\n",*(q+2));
試してみましょう:
強制的な型キャストを実行すると、(char)p は 4 バイト int の最初のバイトのアドレス (11001101) を指します。
一番左の 1 は負の符号を表し、負の数であることを示します。 2 の補数を適用すると、0110011 (最後の 7 ビット)
(注: 正の数の場合、2 の補数は単に 10 進数の 2 進表現です。負の数の場合、2 の補数は、左端 (最上位) ビットを除くすべてのビットを反転し、1 を加算することによって取得されます。 )
これを 10 進数に変換すると、-51 になります。面白いですよね?
なぜ -128 なのか疑問に思う人は多いでしょう。答えがわかったら、コメント欄でお気軽に共有してください。これは他の人を助けるだけでなく、自分の考えを整理するのにも役立ちます。
以上が週刊ブログ: 今週出会った 4 つの興味深いことの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。