一 原碼、反碼、補碼
計算機儲存的數為補碼
數分為有符號(正、負)和無符號(全是正)
原碼正數:數轉換為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對應的二進位制數,...