進製轉換部分學習筆記

2021-10-01 08:22:30 字數 2623 閱讀 3161

1、進製轉換

a、十進位制轉二進位制

計算機(物理特性決定的)只能識別二進位制

求餘法:麻煩但準確率高

求權法:速度快,減法運算準確率要高還要記得每個二進位制位上的1所代表的十進位制整數

b、二進位制轉八進位制

八進位制為了儲存記錄二進位制的

11111111 <=> 0377

每三個二進位制位對應乙個八進位制,最後兩位對應乙個。

注意:以0開頭的資料表示八進位制資料

c、二進位制轉換十六進製制

隨著計算機的發展,cpu的位數越來越大,八進位制不能滿足需要,因此我們使用十六進製制。

11111111 <=> 0xff

每四個二進位制位對應乙個十六進製制位,大於9的數用字母表示(10:a 11:b 12:c 13:d 14:e 15:f不區分大小寫)

注意:以0x開頭的資料表示十六進製制資料

2、資料在記憶體中的儲存

cpu只能計算加法,所有的計算都通過加法模擬實現的,因此所有的資料需要儲存成補碼形式才能進製模擬。

注意:資料在記憶體中是以補碼形式儲存的。

原碼:由十進位制轉換出的二進位制就叫原碼

反碼:原碼按位求反

補碼:正數的原碼就是補碼

負數的反碼+1才是補碼

-123 -> 01111011 -> 10000100+1 -> 10000101

注意:補碼轉換成十進位制的過程。

1、必須要知道補碼所表示的資料是否有符號

2、如果是有符號補碼,根據符號位判斷是正數(最高位是0)還是負數(最高位是1)。

10000101-1 -> 10000100 -> 01111011 -> -123

3、位運算子

注意:位運算子是針對補碼的運算。

& 補碼接位與運算

11001100

10110011

--------

10000000

| 補碼接位與運算

11001100

10110011

--------

11111111

^ 補碼接位異或運算

11001100

10110011

--------

01111111

~ 補碼按位求反運算

~11001100

00110011

00000001

11111110

<< 左移

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

11111110 << 3 -> 11110000

11110000 -> 11101111 -> 00010000 -> -16

128+64+32+16 = 240

>> 右移

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

11111110 >> 3 11111111

01001100 >> 4 00000100

4、陣列

陣列:變數的組合,是一種批量定義變數的方式。

一維陣列:把變數排成一排。

定義:型別 陣列名[數量];

int arr[5] <=> int n1,n2,n3,n4,n5;

初始化:與普通變數一樣,預設值不確定,為了安全要進行初始化。

型別 陣列名[數量] = ;

1、初始化資料過多,丟棄多餘的資料,並產生警告。

2、始化資料不夠則補0,如:int arr[5] = {}。

3、可以省略陣列的數量,編譯器會統計初始化資料的個數然後告訴陣列。

sizeof(arr)/sizeof(arr[0]) 計算陣列的長度

使用:陣列名[編號]

編譯從零開始,範圍:0~數量-1。

注意:括號中的整數,在定義時表示數量,在使用時表示編號。

遍歷:與for迴圈配合,迴圈變數當作陣列的編號。

int arr[5];

for(int i=0; i<5; i++)

二維陣列:把變數排成方陣

定義:型別 陣列名[行數][列數];

int arr[3][5];

初始化:型別 陣列名[行數][列數] = ,,};

使用:陣列名[行編號][列編號];

遍歷:與雙層for迴圈配合,外迴圈遍歷行,內層迴圈遍歷列。

int arr[3][5];

for(int i=0; i<3; i++)

printf("\n");

}變長陣列:指的是陣列的長度在編譯時可以不確定,在執行期間決定它長度的變數可以根據實際發生變化,但當執行到陣列定義語句時,陣列的長度就確定下來了不能再變。

也就是確定陣列長度的時間由編譯時到執行定義語句時。

int n;

scanf("%d",&);

int arr[n];

優點:可以根據實際情況來確定陣列的長度,達到節約記憶體的目的。

缺點:不能初始化(陣列的初始化是由編譯器幫助完成的,而編譯時變長陣列的數量還不確定,因此不能初始化)。

陣列的越界問題:

編譯器為了執行效率,不會檢查陣列的下標是否越界,(因此陣列的越界從語法解譯來說是合法的)。

在使用陣列時超出它定義時的範圍就叫越界(下標》=數量)。

陣列越界的後果:一切正常、段錯誤、髒資料。

學習筆記 進製轉換

學習下c語言以及相關的基礎,最近會更新很基礎的知識 常用的進製分別為2進製 10進製 生活常用 16進製制 二進位制十進位制 十六進製制00 0111 102211 331004 410155 1106 611177 100088 100199 101010a 101111b 110012c 110...

學習筆記 排序 進製轉換

摘要 陣列和基本資料型別的內容比較簡單不做詳細的記錄,但是在講解他們的過程中涉及到的排序和進製轉換 拆半查詢比較難所以做特別的筆記 1.排序 i.選擇排序 思想 在陣列中選擇出最大的值放在第一位,然後在剩下的之中查詢最大的放在剩下資料的第一位,直到剩下的資料為空。實現 如下 public stati...

進製轉換python python學習 進製轉換

常用的進製包括 二進位制 八進位制 十進位制與十六進製制,它們之間區別在於數運算時是逢幾進一位。1.十進位制轉二進位制 命令 bin a 8print bin a 執行結果 0b1000 計算 二進位制 十進位制 十進位制 二進位制 8 1000 8 2 餘 0 0 1 0 0 0 4 2 餘 0 ...