1、計算機中的進製
計算機能夠識別的只有二進位制 0、1
進製就是一種計量的單位
2、常見的進製:
二進位制:逢二進一 用0、1來表示,定義乙個二進位制的數:0b 或者 0b ,0b1010(2)=10(10)
八進位制:逢八進一 用0-7之間的數字表示,定義乙個八進位制的數:0 開頭
10進製:逢10進一 用0-9之間的數字表示,定義乙個十進位制的數(預設)
16進製制:逢16進一 用0-9表示16進製制中的0-9,用a-f表示16進製制中的10-15
定義乙個16進製制的數,用0x或者0x開頭
3、進製的轉換問題
10--->2 : 除2取餘法,取餘數逆序 (把乙個10進製的數每次除以2,得到餘數)
2---->10: 用二進位制的每一位乘以2的(x)次方,
如果是正整數:x從右至左,從0開始依次增1
如果是實數: x從小數部分開始,從左至右,x依次增加1
010101110.10101
10-->8:除8取餘,取餘數的逆序
2--->8:取出三位(二級制)合成 1位(8進製)
01 101 101= 155
8--->2:取出1(8進製)拆成3位(二進位制)
2--->16:取出四位(二進位制)合成 1位(16進製制)
16-->2 :一拆四,取出1位(16進製制)拆成 4位(二進位制)
8--->16: 8---->2---->16:先是1拆3,然後4合一
16-->8 : 16--->2---->8 :先是1拆4,然後3合一
4、原碼、反碼、補碼
為什麼要引入反碼和補碼?
儲存乙個負數,主要還是用來優化計算機的減法運算
原碼:乙個正數的二進位制表示,原碼
整數的原碼、反碼、補碼都是一樣的
反碼:符號位不變,其他位按位(逐位)取反的結果
補碼:反碼+1
00000000 00001010
取反:11111111 11110101
+1 11111111 11110110 -5
5、位運算
& 按位與 口訣:同1為1
| 按位或 口訣:有1為1
~ 按位取反 口訣:1變0,0變1
>>右移位 把乙個數的二進位制位逐位向右移動 a>>1 把a向右移動1位
相當於/2
注意:向右移位,移出的那位刪除,左側補符號位
《左移位 把乙個數的二進位制位逐位向左移動 a<<1 把a向左移動1位
相當於*2
注意:向左移位,有可能會改變乙個數的正負性
向左移位,移出的位被刪除,右側補0
任何數和1進行&操作,相當於取這個數的二進位制的最後一位。
6、變數在記憶體中的儲存細節
int 4個位元組 %d %i
float 4個位元組 %f
double 8個位元組%f
long 8個位元組(64),32位下4個位元組
long long 8個位元組,
7、變數型別的修飾符
short int 2個位元組 %hd
10000000 00000000 -2(15)(-32768)
-1 00000000 00000001
01111111 11111111 2(15)-1(32767)
long 8個位元組 %ld -2(63) ~ 2(63)-1
long long 8個位元組 %lld
signed int 4個位元組 %d
unsigned int 4個位元組 %u
8、字元型
字元型資料在記憶體中如何儲存的?
字元型單位元組(8位)
字元型儲存過程 ---->整數--->2進製---->記憶體(字元對應的整數可以查詢ascii碼表)
取出字元的過程記憶體---->二進位制--->整數---->查出對應的字元
char ch;
ch='a'; -->97
%d 97
%c a
字元型和整形可以互相轉換
計算機中的原碼 反碼和補碼計算
計算機中的所有資料都是以資料的補碼形式儲存的 機器碼 這裡涉及到原碼 反碼和補碼的計算如下 1 原碼 在計算機中的機器字長的最高位 最左邊 表示正負,0為正數,1為負數,原碼就是最高位是符號位,其餘位表示數值 絕對值 大小。2 反碼 正數的反碼就是其本身 原碼 不變,而負數的反碼就是在負數原碼的基礎...
計算機中的原碼 反碼和補碼
計算機中的原碼 反碼和補碼 看到這個標題,很多人有話要說了,切!這個東西每一本計算機基礎知識的書中都有介紹的,你還拿出來show什麼嘛!我的原則是你需要就來看一看,懂就不要去理會,倒也不必諷刺兩句,我相信總有需要它的人。當初我看書是沒看明白的,在網上查了好多資料才有所悟。前幾天跟老婆講原碼 反碼和補...
計算機中的原碼 反碼 補碼分析
今天給學生上數字邏輯第一節課,主要講了數制,後面簡單提及了原碼 反碼和補碼,碰到了兩個問題 第一,十進位制數轉八進位制數,學生練習時卡殼,不知道無從下手 第二,原本以為原碼 反碼 補碼應該是一年級甚至中學時就應該解決的問題,實際上原來根本不是這麼回事。中學老師即使講過,估計也是對付考試的方式簡單提及...