C語言進製

2022-08-09 21:33:18 字數 1808 閱讀 5014

一  原碼、反碼、補碼

計算機儲存的數為補碼

數分為有符號(正、負)和無符號(全是正)

原碼正數:數轉換為2進製,最高位如果是0,則是整數

負數:數轉換為2進製,最高位如果是1,則是負數

反碼正數:整數的反碼還是它的原碼

負數:除符號位不變,其它各位,逐位取反

補碼正數:整數的補碼還是它的原碼

負數:反碼+1

2)為什麼要使用補碼?

補碼主要是用於設計計算機的減法

3)已知負數的原碼求補碼

1)反碼:除符號位之外,取反

2)補碼:反碼+1

4)已知補碼求原碼:

補碼取反加1為原碼

二:位運算:

乙個數的二進位制機器碼之間的運算

c語言中的位運算子介紹:

是乙個雙目運算,需要有兩個運算元

1)&  按位與 (比較兩個數對應的數碼,如果都為1,則結果為1)

口訣:同1為1

2)|  按位或(比較兩個數對應的數碼,如果有乙個為1,則結果為1)

口訣:有1為1

3)^  按位異或(比較兩個數對應的數碼,如果兩個碼相同則為0,不同則結果為1)

口訣:相同為0,不同為1 

4)~  按位取反(單目運算,數碼逐位取反)

口訣:0變1,1變0

5)>> 按位右移 

表示所有的二進位制位,整體右移n位

注意:1)數值得變化:每向右移動1位相當於除以2,保留整數部分

2)右移的時候,高位補符號位,低位直接捨棄

3)向右移動的時候,不會改變乙個數的正負性

6)<< 按位左移

表示:所有的二進位制位,都向左移動

左移:1)左移可以讓乙個數變大

左移1次相當於*2

2)左移可能會改變乙個數的正負性

3)高位捨棄,低位補0

技巧:1)任何數和1進行按位與(&) 的到這個數的低位

三:變數的儲存:

檢視變數的位址使用 %p

1)記憶體是由若干個1個位元組的儲存單元組成

每個單元都有乙個唯一的位址

2)記憶體儲存資料是從高位址向地位址分配的

資料有高位和地位

int a =10;

00000000 00000000 00000001 00001010

高                                低

3)變數在記憶體中最小的那個位址,是變數的首位址

四: 變數的修飾符:

1)改變變數的儲存空間

short   2個位元組   -2^15 ~ 2^15-1;

int     4

long    8

long long 8

2)改變變數的符號

signed   有符號數(預設的時有符號的)

unsigned 無符號數

五://注意:char型的常量和變數儲存方式是有差別的

char c ='a';     //97     1個位元組 -128,127

int size = sizeof(c);     //1

//在c語言中char的常量會被當做整形資料儲存

size = sizeof('a');

printf("%d\n",size);

//1、儲存的原理,取出字元對應的ascii碼值,轉換成2進製,儲存到乙個位元組中

char ch='a';  //65     01000001

//以字元型的形式取出來:記憶體存的是65,到ascii碼表中查詢ascii碼值等於65的字元   找到這個字元取出來

printf("%c\n",ch);

c語言進製

1.負數二進位制的表示方法 假設有乙個 int 型別的數值為5,那麼,我們知道它在計算機中表示為 00000000 00000000 00000000 00000101 5轉換成二制是101,不過int型別的數占用4位元組 32位 所以前面填了一堆0。原碼 正數的原碼按照絕對值大小轉換成的二進位制數...

c 語言 進製轉換

題目描述 將十進位制整數n轉換成二進位制,並儲存在字元陣列中,最後輸出。要求定義並呼叫convert 函式,將十進位制整數n對應的二進位制數存入字元陣列str中。void convert int n,char str 輸入輸入乙個非負整數n,n 2 31。輸出輸出乙個01字串,即n對應的二進位制數,...

c 語言 進製轉換

題目描述 將十進位制整數n轉換成二進位制,並儲存在字元陣列中,最後輸出。要求定義並呼叫convert 函式,將十進位制整數n對應的二進位制數存入字元陣列str中。void convert int n,char str 輸入輸入乙個非負整數n,n 2 31。輸出輸出乙個01字串,即n對應的二進位制數,...