C/C++編程筆記:C ++數(shù)據(jù)類型超出有效范圍時,我們應(yīng)該怎么辦?


首先,我們來考慮以下程序。
1)程序顯示當我們越過'char'范圍時會發(fā)生什么:

這段代碼會打印“ a”直到它變成226嗎?答案是不確定的循環(huán),因為這里的“ a”被聲明為字符,其有效范圍是-128到+127。當“ a”通過a ++變?yōu)?28時,超出范圍,結(jié)果,從范圍的負數(shù)開始的第一個數(shù)字(即-128)被分配給a。因此,滿足條件“ a <= 225”,并且控制保留在循環(huán)內(nèi)。
2)程序顯示當我們越過'bool'范圍時會發(fā)生什么:

該代碼將無限期打印“ 1”,因為此處的“ a”被聲明為“ bool”,有效范圍是0到1。對于布爾變量,除0以外的任何其他都是1(或true)。當“ a”試圖變?yōu)?(通過a ++)時,會將1分配給“ a”。滿足條件a <= 5,并且控制保留在循環(huán)中。
3)程序顯示當我們跨過'short'的范圍時會發(fā)生什么:
注意short是short int的簡稱。它們是同義詞。short,short int,signed short和signed short int都是相同的數(shù)據(jù)類型。

這段代碼會打印'a'直到變成32770嗎?答案是不確定的循環(huán),因為這里的“ a”被聲明為short,其有效范圍是-32768至+32767。當“ a”試圖通過a ++變?yōu)?2768時,超出范圍,結(jié)果是該范圍負數(shù)的第一個數(shù)字(即-32768)被分配給a。因此,條件“ a <32770”得到滿足,控制仍在循環(huán)內(nèi)。
4)程序顯示當我們跨過'unsigned short'范圍時會發(fā)生什么:

這段代碼會打印“ a”直到變成65536嗎?答案是不確定的循環(huán),因為這里的“ a”被聲明為short,其有效范圍是0到+65535。當“ a”試圖通過a ++變?yōu)?5536時,超出范圍,結(jié)果是范圍中的第一個數(shù)字(即0)分配給了a。因此,條件“ a <65536”得到滿足,控制仍在循環(huán)內(nèi)。
說明-
我們知道計算機使用2的補碼表示數(shù)據(jù)。例如,如果我們有1個字節(jié)(我們可以使用char并使用%d作為格式說明符以十進制形式查看它),則可以表示-128到127。如果我們將1加上127,我們將得到-128。那是因為127是二進制格式的01111111。如果將1添加到01111111中,我們將得到10000000。10000000是2的補碼形式的-128。
如果我們使用無符號整數(shù),也會發(fā)生同樣的情況。255是11111111,當我們將1加到11111111時,我們將得到100000000。但是我們只使用前8位,所以它是0。因此,在255中加1后得到0。

另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

UP在主頁上傳了一些學習C/C++編程的視頻教程,有興趣或者正在學習的小伙伴一定要去看一看哦!會對你有幫助的~
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍分享:

編程學習視頻分享:
