標籤:電腦儲存形式 進位轉換
因為電腦能夠識別二進位序列,所以電腦會以二進位的形式儲存一個數 。對於一個正數,以原碼的形式儲存。對於負數,以補碼的形式儲存。
正數的原碼,反碼,補碼相同:
例:1
原碼:00000000 00000000 00000000 00000001
反碼:00000000 00000000 00000000 00000001
補碼:00000000 00000000 00000000 00000001
負數:負數以補碼的形式儲存(最高位是符號位,1表示負,0表示正)
例:-1
原碼:10000000 00000000 00000000 00000001
反碼:11111111 11111111 11111111 11111110(符號位不變,其餘位按位取反)
補碼:11111111 11111111 11111111 11111111(原碼取反再加一)
大端小端:因為電腦儲存的最小單位是位元組,而一個位元組是8個bit位,所以我們將整型4個位元組的1表示為:00 00 00 01
例:1
大端形式:00 00 00 01
小端形式:01 00 00 00
通常我們在書寫時採用大端形式,而電腦在儲存時採用小端儲存,我們可以來驗證:
union B{ int a; char b;};int main(){ union B A; A.a = 1; printf( "%c\n",A.b); system( "pause"); return 0;}
按照小端儲存的形式,輸出的結果應該是ASCII碼為1的值。
二進位與十進位轉換:
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/7E/79/wKioL1cB-pKjFrThAABYDh-Ui3U144.png" title="無標題.png" alt="wKioL1cB-pKjFrThAABYDh-Ui3U144.png" />
650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />
>>右移:二進位向右移位,正數的話空出來的補0;
例:7>>2=1(注意不能寫成7<<-2,這兒是錯誤的形式)
00000000 00000000 00000000 00000111
00000000 00000000 00000000 00000001
<<左移:空出來的位補0
例:4<<1=8;
00000000 00000000 00000000 00000100
00000000 00000000 00000000 00001000
算術移位和邏輯移位:
只有再對於負數右移時才考慮的一種情況:因為負數的最高位是符號位,所以當向右移時,空出來的位是補0還是補1.
算術移位:空出來的位補1.
邏輯移位:空出的位補0.
具體是算術移位還是邏輯移位,取決於電腦平台,所以當負數右移時其程式不具有移植性。
按位與:針對二進位的每一位進行的運算,同為1才為1,否則為0;
例7&5=5
00000000 00000000 00000000 00000111
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00000101
按位或:針對二進位的每一位進行的運算,至少有一個位為1才為1,否則為0;
例:8|4=12
00000000 00000000 00000000 00001000
00000000 00000000 00000000 00000100
00000000 00000000 00000000 00001100
異或:針對二進位的每一位進行的運算,相同為0,不同為1;
例:7^4=3
00000000 00000000 00000000 00000111
00000000 00000000 00000000 00000100
00000000 00000000 00000000 00000011
取反:針對二進位的每一位進行的運算,1變0,0變1;
00000000 00000000 00011000 00000011
11111111 11111111 11100111 11111100
本文出自 “11132019” 部落格,請務必保留此出處http://11142019.blog.51cto.com/11132019/1760091
電腦儲存形式與進位轉換