進製轉換:
十進位制轉二進位制:
求餘法:用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...