對於熟悉的關鍵字,看到了,第一反應必須快速的給出正解,倘若不能,就說明還不夠熟悉。我問自己:資料型別有哪些?似乎一下子說不那麼全。習慣性的要列個圖,不求多高的要求,起碼要和課本上概括的差不多吧。
說到資料型別,得記得住這些型別是佔多少位元組吧,畢竟我們是搞地基的。又可以重溫一遍資料型別了,再閉上眼睛回想一下打出來,看看能有多快!!!、
1;int 即signed int. 4個位元組
2;unsigned int .4個位元組
3;short int . 2個位元組
4;unsigned short int . 2個位元組
5;long int .4個位元組
6;unsigned long int. 4個位元組
7;【signed】/【unsigned】 char . 1個位元組
8;float . 4個位元組
9; double/long double . 8個位元組
還想再回顧一遍:
signed int , short int , long int , unsigned int ,unsigned short int, unsigned long int, signed char ,unsigned char,float, double,long double^^
一,有符號和無符號的區別!
為什麼signed int ,unsigned int , signed char, unsigned char^^
如果是signed有符號的話,那麼這個數值就要用補碼的形式來存放,在這個存放的單元中,儲存單元的最高位(什麼代表位?bit位元嘛!)來表示數值的符號。如果是unsigned無符號的話,數值就沒有符號,全部二進位制位都用來表示這個數值的本身。
再用一句話來概括,無符號和有符號的區別就在於它們在記憶體中顯示的數值的第一位,也就是最高位是當做符號位來用還是當做數字本身來用。這樣說太抽象,畫個圖一目了然。
我們來帶著問題的來研究這幅圖:
1,為什麼有16個空格?
首先要知道乙個單位,bit位元,這是我們表示資訊的最小單位了,它呢,只有兩種狀態,要麼是0,要麼是1. 乙個位元組(byte)是8個位元,即1 byte = 8 bit.
short int是兩個位元組,所以也就是16個位元。
(注:
short int在16位機佔2個位元組,在32位機中佔4個位元組)
2,裡面的0和1代表什麼意思?
在第一點裡面也說了,只有0和1兩種狀態、計算機的所有資料都是按照二進位制進行儲存的!那麼在16位機中,short int佔了兩個位元組,有16個位元位,就是有16個空格讓你填,只能填0或1,會數學的都知道16個空格有多少中組合了吧,2的16次方!為什麼是2的16次方,0和1兩個數排列組合,不是2難道是3嗎!
為什麼是2的15次方,上面已經說了,最高位是符號位,剩下15位儲存數值,為什麼最大值2的15次方還要減一?
1+2^1+2^2+…+2^14
=2^15-1
沒問題吧!
問題又來了,為什麼最小值是-32768,而不是-32767?
計算機用二進位制來表示負數時用的是「補碼法」,做法就是正數按原碼,負數用其相反數的反碼加一,有點繞,需要專門寫一篇進製轉化的文章。
這種結果用-32768代替了「-0」,可以讓符號位能與有效值部分一起參加運算,從而簡化了運算規則,同時使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。
再換種說法,原碼中,+0和-0都表示零,補碼中,正零還是零,但「負零」用來表示最小值(-32768),暫且把這個當做一種規定。記憶體中有符號整數是用補碼形式儲存,如果是用原碼形式儲存由於0可以表示為 0000 0000 0000 0000[+0] 或者 1000 0000 0000 0000[-0] ,所以只能表示-32767~32767 ,但是如果用補碼儲存,0[+0或-0]就被唯一確定了是0000 0000 0000 0000 ,多出來的一位用於表示最小整數,即-32768 ,聽了可能還是不太明白,等寫新的文章時再進行闡述!
那麼,**無符號的取值範圍是多少呢?**2的16次方減1.也就是65535,能看懂有符號的為什麼減一,就能看懂無符號為什麼減一,這個二進位制的計算方法。因為沒符號嘛,所以最小值就是0了,所以無符號的取值範圍是0~65535.
有符號和無符號資料型別
原版出處 c語言中提供了很多整數型別 整型 主要區別在於它們取值範圍的大小。int代表有符號的整數,也就是說,用int宣告的變數可以是正數也可以是負數,也可以是零,但是只能是整數。比如 int a 3 int b 0 int c 5 以上這些都是合法的。int的取值範圍因機器而異,一般而言,在較舊的...
資料型別和表示式(c )
main.cpp 資料型別與表示式 created by mac on 15 2 16.include int main int argc,const char argv 三個數的排序 using namespace std void sortthree int x,int y,int z else...
有符號整型資料和無符號資料型別
整型有無符號 unsigned 和有符號 signed 兩種型別 在預設情況下宣告的整型變數都是有符號的型別 char有點特別 如果需宣告無符號型別的話就需要在型別前加上unsigned。無符號數隻表示大小,有符號數最高位 二進位制情況下最高位表示符號位 在同一作業系統 下,有符號數和無符號數的最大...