在VS Code中編寫C++檔案時,我將一個檔案命名為first.c.cpp。完成程式後,我在執行過程中遇到了錯誤。經過30分鐘的檢查,我發現問題出在檔名:
.c 副檔名導致 IDE 錯誤地將其識別為 C 程序,導致 VS Code 使用 gcc(C 編譯器)而不是 g++(C++ 編譯器)來編譯我的程式碼。
標題:真是個傻瓜!
Java 的設計理念與傳統編譯語言有顯著差異:
這種設計實現了「一次編寫,隨處運行」的目標,而 C++ 可執行檔(.exe 檔案)僅限於在單一平台上運行。
優點:同一個程式不需修改即可在不同電腦上執行
缺點:與傳統方法相比,過程中的額外步驟可能會使編譯速度稍微慢一些
寫一次,隨處運作
---------James Gosling
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?
這是巧合嗎?讓我們再試試兩個例子
printf("%d\n",*(q+1)); printf("%d\n",*(q+2));
試試看:
執行強制型別轉換時,(char)p 會指向四位元組 int 的第一個位元組的位址,即 11001101。
最左邊的1代表負號,表示是負數。套用二進位補碼後,我們得到:0110011(最後 7 位元)
(註:對於正數,二進制補碼只是十進制數的二進位表示。對於負數,二進制補碼是將除最左邊(最高)位之外的所有位取反,然後加1 得到的到最右邊的位子。 將其轉換為十進制得到 -51。有趣吧?
很多人想知道為什麼是-128。如果你知道答案,歡迎在留言區分享。這不僅可以幫助別人,還可以幫助你整理思緒。
以上是每週部落格:本週我遇到的四件有趣的事情的詳細內容。更多資訊請關注PHP中文網其他相關文章!