在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 顛倒了二進位表示中的位元組順序。然而,重要的是要注意每個位元組內的位元順序保持不變!
我最喜歡的引入類型轉換的實驗!
# includeint 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。有趣吧?
補碼的好處:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3