C语言中CY位什么时候才能为1_你真的了解C语言中的整型吗?
整型數據類型
1. 整型數據類型
??在上一節當中,我們遇到了整型(integer)int,用來表示一個整數的數據類型。
??下面呢我們來討論一下C語言里面的整數數據類型。
??看到這里你可能想問,一個整數而已,為什么會需要定義這么多的類型出來呢?
??要知道在發明C語言的年代,計算機資源是非常珍貴的。對內存資源,就是恨不得把一塊錢掰成兩半用的那種感覺。能用小一點的來內存來存儲,就不用大的。當然,現在大部分的強類型語言,都延續了這個傳統。即使現在內存資源以及豐富了,程序員可以在編寫代碼時,可以預想到可能的數據大小。為什么不讓程序員自行決定,用什么類型呢?
??接下來,你可能想知道這些類型中,具體的大小限制是多少。很遺憾,我不能100%準確的告訴大家。因為C語言標準并未規定這些數據類型的大小范圍,具體的實現交由了編譯器和平臺決定。那我們怎樣知道在visual studio 2019中,各種整型變量的大小呢?我們需要sizeof關鍵詞來幫我們測量。
2. 關鍵詞及sizeof關鍵詞
??和int一樣,sizeof是C語言中的一個關鍵詞。
??關鍵詞是被編譯器識別的,具有特殊意義的單詞。在C語言標準中,關鍵詞如下表所示。它們在C語言當中,都有具體的語法意義。例如int,代表一個整型數據類型,return代表函數結束并帶回返回值。
帶有*號的這些關鍵詞是C99標準新增的,在C++中并未保留。
??關鍵詞sizeof,其實是英文size of的意思,就是某某的大小的意思。如果我們想看int的大小,那么我就可以這樣寫sizeof(int)。被執行之后,會返回一個整型。我們可以用%d來占位,printf的用法請參照上一節。
printf??sizeof后面既可以跟類型,也可以跟變量、常量。
1. 跟類型,測這個類型的大小。
2. 跟變量,測這個變量的類型的大小。
3. 跟常量,測這個常量類型的大小。
??我們可以在自己的電腦上運行一下,檢查一下所有整型類型的size。
printf??運行一下,我們看到了結果。
??char 為1 ,short 為 2, int 為 4, long 為 4, long long 為 8。什么int只能表示4?不是的,這個sizeof出來的大小是表示int所占的字節數為4。一個字節有8位二進制,那么4個字節就是32位二進制。那么32個二進制能表示多大的整數呢?
3. 各種整型類型的數值范圍
TIPS:
??如果關于整型范圍的分析暫時看不懂,請先記住sizeof的使用和各種整型變量的取值范圍即可,不影響對C語言的使用。到時候回過頭再來看取值范圍的原理分析。
??我們先暫時不要討論32個二進制,我們討論一個稍微小一點的,3個二進制。它能表示多大范圍的數值呢?
??請不要忘記給0位置了哦。那么32個二進制呢?
?? 2 x 2 x 2 x 2 x 2 ...(32個) x 2 x 2 = 2的32次方 = 4,294,967,296
?? int的數值范圍為:0 到 4,294,967,295。我們作對了嗎?
??快了,但是不全對。我們來看下面這個代碼。
??對的,你肯定意識到了,負數怎么辦?那我們需要拿出一個位來表示符號。表示這個數據是正數還是負數。在IEEE標準中,這個符號位存在于二進制的最高位。同樣的,我們來看三位二進制的情況。
??加上符號之后,現在取值范圍變為-4到3了。紅框中的為最高位,最高位為1的表示負數。你可能會覺得有點奇怪,為什么3的二進制是011,而-3卻是101呢?如果簡單的加一個符號位,為什么不用111呢?那我們看看3+(-3)的運算結果。
??可以看到,如果用上圖中的101表示-3,那么3+(-3)的結果是正確的。和的結果為1000,但是我們只用3個二進制來表示數值。所以第四位被被拋棄了,也就是我們常說的溢出。但是,這個溢出卻讓我們得到了正確的結果000。而用111來表示-3,卻無法得到正確的結果。
??讓我們多算幾個,你會發現仍然是正確的。
??你肯定很好奇,怎樣求一個正數對應的負數的二進制表示呢?
??和上圖的數據對照一下看看,確實是一致的。這種負數的表示法,既通過最高位,區別了正數和負數。并且,巧妙地應用了溢出,計算結果也是正確的。因此,既然能計算負數了,那么所有的減法,都能通過加一個負數來實現。這樣,使得計算機電路得到了簡化。這種表示負數的方法,被稱為補碼。一個正整數的補碼是它本身,負數的補碼,通過剛剛的步驟可以求得。
??最后,你肯定發現了整數4位,二進制為【100】,而負數4,在三位二進制表示中,也是【100】。這可咋辦呢?既然最高位是符號位了,并且,負數4的運算結果也正確。我們上面已經算過關于-4的了。那我們就只能用【100】來表示-4了。因此,3位二進制可以表達的數值范圍為【 +(2的二次方) ~ -(2的二次方 - 1) 】,也就是-4到+3。
??終于可以回到最前面的問題了。各種整型變量的數值范圍是多少?
次方數比位數少一,是因為最高位被用去做符號位了。
4. 無符號整型
??如果你確定你不會用到負數,那么請使用unsigned關鍵詞。表明這個數據類型,是不帶有符號位的。既然不帶有符號位了,那么原本留給符號位的那一個二進制位,可以用來表示數值。
5. char為什么叫字符型
??由于計算機更改開始發展的時候,是由歐美的科學家和工程師進行開發的。它們暫時考慮到字符僅僅是拉丁字符,即26個字母加一些標點符號。并且把一個數值和字符做了一一對應關系。
??如圖中,字符a為97,字符b為98。而char剛好可以裝得下0到127,不浪費空間。所以一個字節的整型變量,被叫做了字符型。
??當你用整型轉換符%d來打印97的時候,輸出結果是97。 ??當你用字符轉換符%c來打印97的時候,輸出結果是a。
??如果你想表示一個字符,int雖然也可以,但是char更不占空間啊。
6. 怎樣保證使用的整數在各個平臺上范圍統一
??由于不同平臺的int算出來的sizeof可能不同,因此在數據范圍特別敏感的情況下。請使用頭文件stdint來定義你的變量類型。例如int32_t可以保證無論在上面平臺上,都保證sizeof大小為32 / 8 = 4。
總結
以上是生活随笔為你收集整理的C语言中CY位什么时候才能为1_你真的了解C语言中的整型吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 二分算法php,PHP练习-二分查找算法
- 下一篇: php简单实例,php实现推荐功能的简单
