最近因為要開始找工作,因此開始重新寫了一遍C語言。那么重新學了一遍發現自己有不少盲點,因此要好好的總結一下。
1、關於C語言類型的理解
2、關於C語言有符號無符號的理解
3、關於浮點數的理解
1、關於C語言類型的理解
我們在平時都知道C語言的類型有很多種,比如int,char,float,當然同時還有一些struct我們自己定義的一些C語言類型,在C語言的應用中,我們可以自覺地使用這種類型來進行定義變量,那么類型究竟什么什么東西?變量又是干什么的呢?
答:首先我們要知道,我們的所有程序編寫其實說白了同時操縱計算機的內存,但是我們不可能直接操縱內存,因此我們需要找到一些接口來操縱內存。那么我覺得這些接口其實就是變量,比如我們int a,那么我們就可以通過a來操縱這段內存。
那么類型是什么呢?我們在執行int a這段代碼的時候電腦做了些什么呢?我認為至少做了兩個部分。第一就是指定了某段內存的地址。比如0x11111開始的內存部分。第二就是指定了內存的大小,比如使用int就指定了我們可以操縱4個字節的內存。換句話說,類型就是將內存的屬性賦予的變量。
以上就是我對類型和變量的理解。
2、關於C語言有符號和無符號的理解
首先要說一下整型中一共有三種表現形式,分別是無符號整型,有符號整型中的正數表示和有符號整型中的負數表示方法。其中無符號整型的范圍為0~232這樣的范圍,而有符號整型為2-31~231這樣的范圍,其差別就在於前者最高位可以用來表示數字,而后者最高位只能用來表示符號。而有符號整型中的表示方法又可以分成兩種,其中正數的表示方法就是其自身,而負數的表示方法為其正數的所有位置倒過來再加1.
另外還有一點需要注意,那就是有符號數與無符號數相加結果是無符號數。
以上就是我對有符號書和無符號數的理解。
3、關於浮點數的理解
我們以float為例,float的表示方法和int是完全不同的,首先說一下他們都是32位的 機器,但是其表示方式完全不同。float可以分成三個部分,分別是第32位(符號位),從第31位到第23位(指數位,從第22位到第0位(尾數位)。
其中第32位符號位表示正負數,如果是0表示正數,1表示負數,其中第31位到第23位表示指數位,從第22位到第0位表示尾數位。
接下來我舉一個實例說明,黃色表示符號位,綠色表示指數位,咖啡色表示尾數位。
舉例:20.75(10進制數字)
他的框架是這樣的:
1、把整數位變成二進制
2、把小數位變成二進制
3、移動位置使其在0和1中間,並確定其指數的值
4、最終確定表示
其中,將20轉換位2進制數字,可以采用倒2法(0001 0100)
將0.48變成二進制數字,這里要說一下,如果是整數位我們可以采用無限除2的方法,小數位我們采用無限乘以2的方法。所以小數位為10
綜上20.75變成二進制為10100.10。
接着,移動位置使其在0~1中間。為1.010010*24則其指數值為4+127=131(為啥是加127我也沒弄明白)
最后,我們可以確定為其表示為0100000111010010000000000000000.
以上就是我對浮點數的理解。