每週部落格:本週我遇到的四件有趣的事情
1. 避免 VS Code 中檔案名稱混淆
在VS Code中編寫C++檔案時,我將一個檔案命名為first.c.cpp。完成程式後,我在執行過程中遇到了錯誤。經過30分鐘的檢查,我發現問題出在檔名:
.c 副檔名導致 IDE 錯誤地將其識別為 C 程序,導致 VS Code 使用 gcc(C 編譯器)而不是 g++(C++ 編譯器)來編譯我的程式碼。
標題:真是個傻瓜!
- 解決方案:在tasks.json檔案中,將「命令列」從gcc更改為g++。
- 經驗教訓:對 C++ 檔案使用清晰的 .cpp 副檔名以避免不必要的混亂。
2.Java的跨平台設計理念
Java 的設計理念與傳統編譯語言有顯著差異:
傳統編譯:
- 像C++這樣的語言直接編譯成特定的機器碼 平台(例如 Windows、Mac、Linux)
- 產生的可執行檔(.exe)只能在目標平台上執行
Java的方法:
- 編譯器產生中間程式碼(字節碼)
- 此字節碼可以在任何安裝了 Java 虛擬機器 (JVM) 的平台上運行
- JVM 負責將字節碼翻譯成目前平台的機器碼
這種設計實現了「一次編寫,隨處運行」的目標,而 C++ 可執行檔(.exe 檔案)僅限於在單一平台上運行。
優點:同一個程式不需修改即可在不同電腦上執行
缺點:與傳統方法相比,過程中的額外步驟可能會使編譯速度稍微慢一些
寫一次,隨處運作
---------James Gosling登入後複製
3. 兩種常見的編譯模式
- 調試模式面向調試,優化較少。主要用於調試程式。
- Release模式主要用於產生release版本,注重最佳化,只保留基本的調試功能。
4. 從底層角度理解強制類型轉換
Little Endian:最低有效位元組儲存在最低位址。這種儲存方法的出現是為了方便CPU從低位址到高位址讀取記憶體。有趣的是,這與人類通常寫數字相反。
例如:
329933 的二進位表示為 00000000 00000101 00001000 11001101
小端儲存:11001101 00001000 00000101 00000000
正如我們所看到的,Little Endian 顛倒了二進位表示中的位元組順序。然而,需要注意的是,每個位元組內的位元順序保持不變!
一個了解強制類型轉換的有趣遊戲
我最喜歡的引入類型轉換的實驗!
# 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?
解釋
- (char*)&a 指向 int 的第一個位元組。第一個位元組 11001101 被解釋為一個字元。
- 最高位1表示負數,補碼轉換後得到-51(熟悉補碼的朋友可以驗證一下是否確實代表-51)
這是巧合嗎?讓我們再試試兩個例子
printf("%d\n",*(q+1)); printf("%d\n",*(q+2));
試試看:
- 嘗試執行上面提到的程式碼並觀察輸出。
- 考慮為什麼第二個和第三個位元組會產生這樣的輸出。 歡迎在留言區討論這個問題。
- 您可以將強制型別轉換套用至其他資料型別嗎?快來嘗試一下吧!
附加資訊:補碼
執行強制型別轉換時,(char)p 會指向四位元組 int 的第一個位元組的位址,即 11001101。
最左邊的1代表負號,表示是負數。套用二進位補碼後,我們得到:0110011(最後 7 位元)
(註:對於正數,二進制補碼只是十進制數的二進位表示。對於負數,二進制補碼是將除最左邊(最高)位之外的所有位取反,然後加1 得到的到最右邊的位子。 將其轉換為十進制得到 -51。有趣吧?
補碼的好處:
- 它允許僅使用加法器來計算正數和整數類型,從而無需減法器並簡化硬體需求。
- 它提供了零的唯一二進位表示。 10000000 不代表-0,而是-128,而00000000 代表0,而不是+0。
很多人想知道為什麼是-128。如果你知道答案,歡迎在留言區分享。這不僅可以幫助別人,還可以幫助你整理思緒。
以上是每週部落格:本週我遇到的四件有趣的事情的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

本教程演示了創建通過Ajax加載的動態頁面框,從而可以即時刷新,而無需全頁重新加載。 它利用jQuery和JavaScript。將其視為自定義的Facebook式內容框加載程序。 關鍵概念:Ajax和JQuery

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

此JavaScript庫利用窗口。名稱屬性可以管理會話數據,而無需依賴cookie。 它為瀏覽器中存儲和檢索會話變量提供了強大的解決方案。 庫提供了三種核心方法:會話
