reg為暫存器
字長,是說這個暫存器是多少寬的,每個暫存器可以表示32bit資料,也是說cpu與ram每一次傳遞的資料也是32bit
計算機內部一切都是二進位制
所有的型別,只是說我們以什麼方式去看待它,並不是表明,它在內部是怎麼 表達的。
18 -> 00010010
-18 -> ?
我們在做十進位制運算時,我們實際上總是把負號先拋掉,把它當做乙個整數做運算,在運算的結果上再解決負號問題。
例如:12+(-18)-> 12-18 -> -6
第一種方法需要在計算時需要新增符號來控制符號,不利於計算機內部的設計
第二種方法在使用時需要與中間數進行運算來判斷當前數的具體數值
兩種方法都使得計算機的輸入輸出變得複雜。
實際計算機中使用的是補碼來表示負數
補碼思想:
256是28就是256((1)00000000),28-1就是-1的補碼
補碼的意義就是拿補碼和原碼可以加出乙個溢位的「零」
這樣可以直接做普通的二進位制運算,不需要進行+-符號的變換
高位為0,表示1-127
高位為1,表示-1 - -128
#include int main()
int的範圍
-232-1 ~ 232-1-1
char 表達的是-128 ~ 127(中間有0)
所有整數型別範圍,在是2n-1 ~ 2n-1-1
如果想將11111111當做乙個純二進位制的來看需要unsigned來表達
unsigned的意思是這個整數不以補碼的形式表示,沒有負數,使得正數的表達範圍被擴大。
00000000-11111111 unsigned表示0-255,原來是-128~127
第二個01111111是127,加1 後本來是128,但128作為乙個整數char來說,它所表達的是-128
將數的範圍想象成乙個圓
對乙個unsigned char來說,127+1就等於128,如果是255,+1才變成0
所以對於unsigned char來說,另乙個圓
使用數的範圍可以找出int的最大數來,這也是翁凱老師留的乙個小測驗。
主要思想還是不斷累加(while迴圈),當最後累加的數小於0時,用這個數再減1就等到int能表示的最大值
所有小於int的,char、short、int都採用相同的輸出就是用%d;所有比int大的,需要用%ld
#include int main()
上面結果一樣都是4294967295(-1表示全1),這個數是unsigned int所能表達的最大的數,char正常-1只有乙個位元組,只有最低位為1,當我們把小於int的變數傳給printf時,編譯器會把變數轉換為int傳進去,因為是有符號的,會被擴充套件為所有位都是1,最後作為unsigned結果就是現在這個結果。
#include int main()
//輸出結果為c=10,i=18
%d是想讓它以十進位制的方式輸出。
八進位制,1x8+2x1=10;十六進製制,1x16+2x1=18
進製只是我們怎麼去看它,並不代表在計算機內部它會表示成八進位制或十六進製制,
計算機內部永遠只有二進位制,你在程式中寫個八進位制,編譯器會替你轉成對應的十進位制形式去變成二進位制交給計算機
小總結:
0001 (1) 00010(2)前四個bit表達為1,後四個為2,12就可以表達前面的二進位制數,16進製制的兩位正好表達乙個char(1個位元組)
cpu每次從記憶體中讀一次資料,每一次向其中寫一次資料,就是乙個int,如果你讓它做乙個char,實際上它做的就是把32 bit的資料全部讀進來,然後從當中拿出那8 bit給你。
C語言之資料型別 整數型別
c語言的變數型別 如 char x 1 儲存的值是 0000 0001 char y 1 儲存的值是 1111 1111 注意 int在16計算機中與short寬度一樣,在32以上的計算機中與long一樣 見原碼,補碼,反碼 資料溢位,是把高位捨棄還是低位捨棄?實驗 c 執行轉反彙編 因此 是捨棄高...
C 整數型別
c 中提供的整數型別有三種 int long short,每種型別又分為有符號和無符號兩種型別。有符號整數既可以表示非負整數,又可以表示負整數 但是,無符號整數不能表示負數,只能表示非負整數。一 無符號整數 在記憶體中,int整數通常佔4位元組,這裡,我們假定int為32位,那麼無符號整數表示的取值...
C語言三種整數型別
名稱 全稱型別說明符 縮寫型別說明符 位數 範圍整型 intint 16位 32768至 32767 無符號整型 unsigned int unsigned 16位0 至 65,535 短整型short int short 16位 32768至 32767 無符號短整型 unsigned short...