C基礎進製轉換 補碼反碼以及函式的講解

2021-10-08 04:21:33 字數 3146 閱讀 2927

進製轉換:

十進位制轉二進位制:

求餘法:用2對資料求餘,然後再對商繼續求餘,直到商為0結束,過程中產生的餘數就是該資料的二進位制(逆序)。

求權法:資料 - 2^(n-1) 如果可以減 第n位就是1,否則是0。

二進位制轉十進位制:每位的2^(n-1) 求和

10101100 128+32+8+4 172

注意:二進位制資料轉換成八或十六進製制是為了方便記錄二進位制資料。

二進位制轉八進位制:三位二進位制對應乙個八進位制。

二進位制 1 010 110 010 101 100

八進位制 1 2 6 2 5 4

十進位制 44204

二進位制轉十六進製制:由於計算機的發展八進位制不能滿足需要,因此引入十六進製制來記錄二進位制。

四位二進位制對應乙個十六進製制。

二進位制 1010 1100 1010 1100

十六進製制 a c a c

十進位制 44204

在c**中:以0開頭的是八進位制資料,以0x開頭的是十六進製制資料。

%x 以十六進製制形式顯示資料

%o 以八進位制形式顯示資料

原碼、反碼、補碼:

補碼:資料在記憶體儲存的二進位制。

正數的原碼就是補碼。

負數的補碼:

1、絕對值轉換成二進位制得到原碼

2、原碼按位求反得到反碼

3、反碼+1得到補碼

-127

01111111 原碼

10000000 反碼

10000001 補碼

補碼轉換成資料:

無符號補碼直接轉換成十進位制。

有符號最高位是0,說明是正數,也直接轉換成十進位制。

有符號且最高位是1:

1、補碼-1得到反碼

2、反碼按位求反得到原碼

3、原碼轉換成10進製加負號

11111111 補碼 有符號

11111110 反碼

00000001 原碼

-1

注意:計算機中的資料都是有型別(儲存空間是固定的)

位運算子:

a & b 按位相與

01011010 0x5a

11000011 0xc3

--------

01000010 0x42

a | b 按位或

01011010 0x5a

11000011 0xc3

--------

11011011 0xdb

~a 按位求反

01011010 0x5a

10100101 0xa5

a ^ b

01011010 0x5a

11000011 0xc3

--------

10011001 0x99

a << n 把a補碼左移n位,左邊的丟棄,右邊補0

01011010 << 4

10100000

a >> n 把a補碼右移n位,右邊的丟棄,左邊補符號位

11000011 >> 4

11111100

函式:一段具有某項功能的**,是c語言中管理**的單位。

把**封裝成乙個個函式,可以方便的管理和呼叫**。

函式分類:

標準庫函式:c語言標準為委員會為c語言以函式形式提供的一些基礎功能,被封裝在libc.so庫中,使用時需要包含標頭檔案,函式名(引數)即可以呼叫。

**int isalnum(int c);

功能:當以是數字、字母字元返回真

int isalpha(int c);

功能:當c是字母時返回真

int isdigit(int c);

功能:當c是數字字元時返回真

int islower(int c);

功能:當c是小寫字母時返回真

int isupper(int c);

功能:當c是大寫字母時返回真

int abs(int num);

功能:返回num的絕對值

以下函式被封裝在libm.so庫檔案中。

double sqrt(double x);

功能:返回x的平方根

double pow(double x, double y);

功能:返回x的y次方

double floor(double arg);

功能:返回小於等於arg的最大整數

double ceil( double num );

功能:返回大於等於num的最小整數

double fabs(double arg);

功能:返回arg的給對值

void srand(unsigned seed);

功能:設定隨機種子

int rand(void);

功能:返回乙個隨機數**

time_t time( time_t *time);

功能:返回自19701月1日 00:00:00 到當前時間過了多少秒。

int system(const char *command);

功能:呼叫系統命令

系統函式:是作業系統以函式介面形式提供的一功能,這些功能包括:

記憶體管理、訊號處理、檔案io、檔案管理、 程序管理、程序通訊、執行緒管理、執行緒同步、網路通訊。

第三庫函式:一些開源或收費的第三**。

glog 日誌記錄

json 序列化反序列化

md5 驗證

xml 配置檔案解析

自定義函式:為了更好的管理**、減少冗餘把**封裝成函式。

函式宣告:函式宣告的目的是為了告訴其它**函式的呼叫格式。

返回值型別 函式名(型別1 變數名1,型別2 變數名2,…);

1、c語言中函式名一般全部小寫,用下劃線分隔。

2、如果不需要引數建議寫void,不要空著。

3、如果不需要返回值就寫void。

隱式宣告:當呼叫函式時沒有定義,編譯器會猜測函式的格式,引數列表會根據呼叫時提供的資料(實參)猜測,返回值會猜成int型別。

函式定義:

返回值型別 函式名(型別1 變數名1,型別2 變數名2,…)

函式呼叫:函式名(實參);

返回值會放在呼叫的位置,可以立即顯示,也可以用變數記錄下來。

標準C語言05 進製轉換 補碼反碼

進製轉換 為什麼使用二進位制 八進位制 十六進製制 因為現在的cpu只能識別高低兩種電流,只能對二進位制資料進行計算。二進位制資料雖然可以直接被cpu計算識別,但是不方便書寫 記錄,把二進位制資料轉換為八進位制是為了方便記錄在文件中。隨著cpu的位數不斷的增加,由早期的8位逐漸發展成了現在的64位,...

C 基礎 原碼 反碼及補碼

以下內容均以8bit值為例進行敘述。資料說是為了方便計算機將減法轉換為加法,計算機中只有加法運算器,但是為什麼使用補碼可以進行轉換?這一步的意義是什麼,以二進位制講解比較抽象,以圓為例進行講解。其實補碼可以用數學中的補數或相反數模擬。如下圖所示圓,原點在圓心,往右為x軸正方向,以圓心為端點的射線與x...

進製轉換,記憶體儲存格式,原始碼,反碼,補碼

1.178 轉2,8,16 178轉2步驟 178除2得89餘0 89除2得44餘1 44除2得22餘0 22除2得11餘0 11除2得5餘1 5除2得2餘1 2除2得1餘0 over,最終結果為 10110010 178轉8步驟 178除8得22餘2 22除8得2餘6 over,最終結果 0262...