c語言學習5

来源:https://www.cnblogs.com/c-learnmore/archive/2023/07/17/17561066.html
-Advertisement-
Play Games

# 1. 迴圈依賴 ## 1.1 什麼是迴圈依賴 首先,什麼是迴圈依賴?這個其實好理解,就是兩個 Bean 互相依賴,類似下麵這樣: """ @Service public class AService { @Autowired BService bService; } @Service publi ...


進位轉換:
1、為什麼使用二進位、八進位、十六進位?
因為目前的CPU只能識別高低兩種電平,只能對二進位數據進行計算
二進位雖然能夠直接被電腦識別,但是不方便人去書寫和記錄,因此就把二進位數據轉換成八進位,方便記錄到文檔中
隨著CPU的位數的不斷增加,已經到目前的64位,所以八進位不再能夠滿足需求,因此發展出現在的十六進位,由於歷史原因八進位還不能退出歷史舞臺

2、十進位轉二進位(其它進位)
求餘法:
用2不停地對數據求餘,然後繼續對商求餘,直到商為0結束,在過程中得到的餘數(逆序)就是該數據的二進位
127 % 2 1
63 % 2 1
31 % 2 1
15 % 2 1
7 % 2 1
3 % 2 1
1 % 2 1
0
0111 1111
求權法:
讓數據從高位n位開始,數據 - 2^(n-1) ,如果夠減,那麼第n位為1,否則為0,直到減完為止
134
128 64 32 16 8 4 2 1
1 0 0 0 0 1 1 0
手算:73 62 121 49

練習1:輸入一個正整數m,然後輸入n(n>=2),顯示m的n進位結果,超過10的位用字母表示
    10  A  11 B  12 C ...
    gcc xxx.c && ./a.out

3、二進位轉十進位
每位乘以權位2^(n-1),求和
10011001 128+16+8+1

4、二進位轉八進位
從低位起,每三個二進位位對應一個八進位位
二進位:10 101 110 111 100
八進位:2 5 6 7 4

5、二進位轉十六進位
從低位起,每四個二進位位對應一個十六進位位
二進位: 10 1011 1011 1100
十六進位: 2 B B C

6、不同進位在程式的顯示:
在C代碼中,以0開頭的數據是八進位數據,以0x/0X開頭的是十六進位數據
%x 讓數據以十六進位顯示
%o 讓數據以八進位顯示
%#x %#o 顯示出數據對應的進位首碼

7、原碼、反碼、補碼
原碼:數據的二進位
反碼:
正數的原碼就是反碼
負數的反碼是:它的原碼符號位不變,其它位按位求反
補碼:
所有數據在電腦中,都是以補碼形式存儲
正數的原碼就是補碼
負數的補碼:
1、轉換成二進位,得到原碼
2、原碼符號位不變,其餘按位求反,得到反碼
3、反碼+1,得到補碼
-127
1111 1111 原碼
1000 0000 反碼
1000 0001 補碼

8、補碼如何轉成數據:
先確定是有符號還是無符號
1、無符號\有符號且最高位為0,補碼直接轉成十進位
2、有符號的且最高位為1
a、補碼-1,得到反碼
b、符號位不變,其餘位按位求反,得到原碼
c、原碼轉十進位數
1111 1111 補碼
1111 1110 反碼
1000 0001 原碼
-1
127+1 = -128
0111 1111 + 1
1000 0000 -128
for(uint8_t i=0; i<256; i++)
{
printf("a");
}

位運算符:
& | ~ ^ << >>
A & B 按位相與
1010 1110 A 0xAE
0111 1100 B 0x7C
--------------
0010 1100 C 0x2C

A | B   按位相或
    1010 1110   A   0xAE
    0111 1100   B   0x7C
    --------------
    1111 1110   C

~A      按位求反
    1010 1110   A   0xAE
    -----------
    0101 0001

A ^ B   按位異或    相同為零,相異為一(口訣:異或求一,同或求零)
    1010 1110   A   0xAE
    0111 1100   B   0x7C
    --------------
    1101 0010

A << n  按位左移n位,左邊超出的丟棄,右邊補0
    1010 1110   A << 3
    0111 0000  

A >> n  按位右移n位,右邊超出的丟棄,左邊補符號位(這點很重要,補的是符號位)
    1010 1110   A >> 3
    1111 0101 

註意:只要式子中出現了位運算符,必須轉換成二進位補碼再進行運算

函數:Function
一段具有某一項功能的代碼集合,是C語言管理代碼的最小單位
把代碼封裝成一個個函數,方便管理和調用代碼
1、函數分類:
標準庫函數:
C語言標準委員會以函數形式提供的一些基礎功能,都被封裝在libc.so庫中,並且分在了不同的文件中,需要使用時只要把對應的頭文件導入即可(例如stdio.h...),然後通過具體的 函數名(參數) 即可完成調用
#include <time.h>
time_t time(time_t *tloc);
功能:獲取自1970-1-1 0:0:0 到調用時總共過了的秒數
用法:time_t sec = time(NULL);

    #include <stdlib.h>
    int rand(void);
    功能:獲取一個隨機數
    註意:目前任何編程語言和系統都沒有真正的隨機數,C編譯器是把從0~極大值範圍的數值打亂後,存儲到一塊固定記憶體中,然後從裡面取所謂的隨機數

    void srand(unsigned int seed);
    功能:種隨機種子,設置從隨機數記憶體的某個位置開始取隨機數,為了實現類似真隨機的效果,seed位置一般使用time(NULL)來設置

    int system(const char *command);
    功能:執行系統命令command
    例如:system("clear");

練習3:獲取10個範圍[100,1000]之間的隨機數,獲取次數不能超過10次
    rand()%901 + 100 [a,b]
    rand()%(b-a+1) +a
練習4:雙色球規則:6個紅球範圍1-33 1個藍球範圍1-16
通過程式產生一組隨機的中獎號碼:紅球不能重覆
    rand()%33+1
    rand()%16+1

系統函數:
    是操作系統以函數形式提供的一些功能介面
    但是系統函數不是真正的函數

第三方庫函數:
    一些開源或收費的第三方代碼
    GitHub
    md5 
    JSON 序列化和反序列化
    100   "100"  "100"  100
    glog  谷歌日誌系統
    XML 配置文件解析程式

自定義函數:
    為了更好地管理代碼,減少代碼冗餘,把代碼封裝成自定義函數

    函數聲明:
        函數聲明的目的為了告訴其他的調用者,該函數的調用格式

返回值類型 函數名(形參類型1 形參名,形參類型2 形參名,...);
    1、C語言中函數名一般全部小寫,可以用下劃線分隔
    2、如果不需要參數時,建議寫void,不要空著
    3、如果沒有返回值,就寫void

    函數定義:
        函數的具體實現
返回值類型 函數名(形參類型1 形參名,形參類型2 形參名,...)
{
    //  函數體
    return [val];
}
  
    函數調用:
        函數名(實參1,實參2);
        註意:返回值會放在調用函數語句這裡,應該用變數接收或者直接顯示,否則再也拿不到

使用函數需要註意的問題:
    函數的隱式聲明:
        在函數調用前沒有任何該函數的聲明或定義,那麼就會產生隱式聲明
        要避免產生隱式聲明,那麼就需要在函數調用前有函數聲明或函數定義
註意:如果在函數調用前完成了函數的定義,那麼函數聲明可以省略

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 TypeScript是一種由微軟開發的自由和開源的編程語言。它是JavaScript的一個超集,而且本質上向這個語言添加了可選的靜態類型和基於類的面向對象編程。 一、! 非空斷言操作符 在上下文中當類型檢查器無法斷定類型時,一個新的尾碼表 ...
  • Flutter是Google推出的一種新的移動應用開發框架,允許開發者使用一套代碼庫同時開發Android和iOS應用。它的設計理念、框架結構、以及對Widget的使用,都讓開發者能更有效率地創建高質量的應用。 ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • 對於這兩個十分接近的設計模式,確實容易產生困惑,代理模式和裝飾器模式看起來十分相似,都是由兩個類實現相同的介面,然後一個類套另一個類。這件事足足困擾了我5分鐘之久,在此總結一下它們的差別。 ## 目的不同 當你想要增強你的類,給你的類增加新功能的話,你就該使用裝飾器模式了。 裝飾器模式由於添加了功能 ...
  • # 【RabbitMQ】當隊列中消息數量超過最大長度的淘汰策略 ## 說明 最近在研究RabbitMQ如何實現延時隊列時發現消息進入死信隊列的情況之一就是當消息數量超過隊列設置的最大長度時會被丟入死信隊列,看到這時我就產生了一個疑問,到底是最後插入的消息還是最早插入的消息會被丟入死信隊列呢?遺憾的是 ...
  • 淺克隆(shallow clone)和深克隆(deep clone)是兩種不同的對象複製方法。 淺克隆會創建一個新對象,然後將原始對象的所有欄位複製到新對象中。如果欄位是基本類型,則它們的值將被直接複製。如果欄位是引用類型,則只會複製引用,而不會複製引用指向的對象。這意味著原始對象和克隆對象中的引用 ...
  • 在最近發佈的Spring 6.1 M2版本中,推出了一個全新的同步HTTP客戶端:`RestClient`。用一句話來讓Spring開發者認識`RestClient`的話:像`WebClient`一樣具備流暢API的`RestTemplate`。所以,`RestClient`的使命就是淘汰已經有14 ...
  • ## 背景 一直以來習慣用docker配置一些本地學習環境,許多教程配置activiti的方式都是通過複製activiti的war包部署在tomcat中,我嘗試了一下通過docker的方式遇到了一些不易察覺的錯誤。 ## 使用方式描述 1. 使用docker安裝tomcat9.0 `docker r ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...