」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 每週部落格:本週我遇到的四件有趣的事情

每週部落格:本週我遇到的四件有趣的事情

發佈於2024-11-08
瀏覽:943

1. 避免 VS Code 中檔案名稱混淆

在VS Code中編寫C檔案時,我將一個檔案命名為first.c.cpp。完成程式後,我在執行過程中遇到了錯誤。經過30分鐘的檢查,我發現問題出在檔名:
.c 副檔名導致 IDE 錯誤地將其識別為 C 程序,導致 VS Code 使用 gcc(C 編譯器)而不是 g(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. 兩種常見的編譯模式

  • 調試模式面向調試,優化較少。主要用於調試程式。
  • Release模式主要用於產生release版本,注重最佳化,只保留基本的調試功能。

Weekly Blog: Four Interesting Things I Encountered This Week

4. 從底層角度理解強制類型轉換

Little Endian:最低有效位元組儲存在最低位址。這種儲存方法的出現是為了方便CPU從低位址到高位址讀取記憶體。有趣的是,這與人類通常寫數字相反。
例如
329933 的二進位表示為 00000000 00000101 00001000 11001101
小端儲存:11001101 00001000 00000101 00000000
正如我們所看到的,Little Endian 顛倒了二進位表示中的位元組順序。然而,重要的是要注意每個位元組內的位元順序保持不變!

一個了解強制類型轉換的有趣遊戲

我最喜歡的引入類型轉換的實驗!

# include 
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表示負數,補碼轉換後得到-51(熟悉補碼的朋友可以驗證是否確實代表-51)

這是巧合嗎?讓我們再試試兩個例子

printf("%d\n",*(q 1));
printf("%d\n",*(q 2));

試試看:

  1. 嘗試運行上面提到的程式碼並觀察輸出。
  2. 考慮為什麼第二個和第三個位元組會產生這樣的輸出。 歡迎在評論區討論這個問題。
  3. 您可以將強制型別轉換套用至其他資料型別嗎?快來試試吧!

附加資訊:補碼

執行強制型別轉換時,(char)p將指向四位元組int的第一個位元組的位址,即11001101。
最左邊的1代表負號,表示是負數。應用二進位補碼後,我們得到:0110011(最後 7 位元)

(註:對於正數,二進制補碼就是十進制數的二進位表示。對於負數,二進制補碼是將除最左邊(最高)位之外的所有位取反,然後加1 得到的到最右邊的位子。 將其轉換為十進制得到-51。有趣吧?

補碼的好處:

它允許僅使用加法器來計算正數和整數類型,從而無需減法器並簡化硬體需求。
  1. 它為零提供了唯一的二進位表示形式。 10000000不代表-0,而是-128,而00000000代表0,不是0。
很多人想知道為什麼是-128。如果你知道答案,歡迎在留言區分享。這不僅可以幫助別人,還可以幫助你整理思緒。

版本聲明 本文轉載於:https://dev.to/stockdale_roger_999e292a7/weekly-blog-four-interesting-things-i-encountered-this-week-eo9?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-04-18
  • Docker實戰:通過Flask項目學習Dockerfile、容器及端口轉發
    Docker實戰:通過Flask項目學習Dockerfile、容器及端口轉發
    本教程演示了使用Docker構建和部署一個簡單的燒瓶應用程序。 我們將介紹創建一個Dockerfile,構建圖像,運行容器,甚至將圖像推到Docker Hub。 對於那些不熟悉Docker基礎知識的人,請查看上一篇文章: [2 讓我們開始一個動手示例: [2 創建一個名為“ flask-app”...
    程式設計 發佈於2025-04-18
  • 測試Go-Chi路徑變量路由:解決無法處理實體錯誤
    測試Go-Chi路徑變量路由:解決無法處理實體錯誤
    用路徑變量測試CHI路由:故障排除和solutions and Solutions 問題:測試使用路徑變量的路由,使用httptptestest.newrequest創建了測試請求。但是,在測試期間執行Artiplect Mifdware會返回HTTP錯誤(不可填充的實體),表明路徑變量上下文不可...
    程式設計 發佈於2025-04-18
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    程式設計 發佈於2025-04-18
  • 如何使用Python有效地以相反順序讀取大型文件?
    如何使用Python有效地以相反順序讀取大型文件?
    在python 中,如果您使用一個大文件,並且需要從最後一行讀取其內容,則在第一行到第一行,Python的內置功能可能不合適。這是解決此任務的有效解決方案:反向行讀取器生成器 == ord('\ n'): 緩衝區=緩衝區[:-1] ...
    程式設計 發佈於2025-04-18
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-04-18
  • 在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8表中將latin1字符轉換為utf8 ,您遇到了一個問題,其中含義的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致電。為了解決此問題,您正在嘗試使用“ mb_convert_encoding”和“ iconv”轉換受...
    程式設計 發佈於2025-04-18
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-04-18
  • Go web應用何時關閉數據庫連接?
    Go web應用何時關閉數據庫連接?
    在GO Web Applications中管理數據庫連接很少,考慮以下簡化的web應用程序代碼:出現的問題:何時應在DB連接上調用Close()方法? ,該特定方案將自動關閉程序時,該程序將在EXITS EXITS EXITS出現時自動關閉。但是,其他考慮因素可能保證手動處理。 選項1:隱式關閉終...
    程式設計 發佈於2025-04-18
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-04-18
  • PHP生成安全隨機字母數字字符串方法
    PHP生成安全隨機字母數字字符串方法
    在各種應用程序中生成隨機的,唯一的字母數字字符串 ,例如帳戶驗證鏈接,對於生成數字和字母組成的唯一和隨機字符串至關重要。這是您可以在PHP中實現這一目標的方法: php 7 這將產生類似的輸出:bin2hex(openssl_random_pseudo_bytes($bytes))More Sec...
    程式設計 發佈於2025-04-18
  • 如何有效地選擇熊貓數據框中的列?
    如何有效地選擇熊貓數據框中的列?
    在處理數據操作任務時,在Pandas DataFrames 中選擇列時,選擇特定列的必要條件是必要的。在Pandas中,選擇列的各種選項。 選項1:使用列名 如果已知列索引,請使用ILOC函數選擇它們。請注意,python索引基於零。 df1 = df.iloc [:,0:2]#使用索引0和1 ...
    程式設計 發佈於2025-04-18
  • Python與Excel動態風險更新技巧
    Python與Excel動態風險更新技巧
    [2 使用Python和Excel的動態風險更新” 在此博客中,我們將使用一個簡單的Ansible Server Update腳本,並將其轉變為基於風險的更新系統。在這裡,風險最低的服務器首先要修補,使我們有機會在進行更高優先級系統之前進行徹底測試。 Ansible自動化: 使用Py...
    程式設計 發佈於2025-04-18
  • Daytona助我優化開發流程
    Daytona助我優化開發流程
    作为开发人员,从事需要平稳开发环境,跨机器的一致性以及快速设置时间的项目,我被介绍给 1。简化的项目设置和依赖项 在[, node.js 的正确版本,并且所有特定于项目的依赖项都可以花费小时。 Daytona通过提供 customizable devcontainer 设置来解决此...
    程式設計 發佈於2025-04-18
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-04-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3