日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

语言余一个负数_C语言学习日记(8)——整数溢出

發(fā)布時間:2024/4/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 语言余一个负数_C语言学习日记(8)——整数溢出 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小時候喜歡玩電子計算器,覺得很神奇,想要算什么數(shù),立刻就能算出來。當時看著計算器的液晶屏幕就想,如果算一個很大的數(shù),超過了屏幕上面數(shù)字的位數(shù),會怎么樣呢?試了以后結(jié)果是INF,那就是無窮大了。雖然當時還小,但好像也知道那是電子計算器位數(shù)不足,從此覺得計算機雖然神奇,但計算能力也是有限的。

同樣,計算機雖然計算能力強大,但計算能力也受位數(shù)的限制,并不是無窮的。以int類型為例,當我們定義一個int類型變量時,它的位數(shù)為32位,4個字節(jié)。

int n;//定義了一個整型變量,占4個字節(jié)

在C語言中,整型變量分為帶符號和不帶符號兩種。int其實是signed int的簡寫,也就是帶符號的。它保存的整數(shù)是有上下限的,最大為2147483647(21億多),最小為-2147483648。

如果計算結(jié)果超出了int類型變量的上下限,會怎么樣呢?我們來定義一個整型變量,并且將它初始化為最大值,然后再加1,看看會發(fā)生什么現(xiàn)象?

int n = 2147483647;//定義一個整型變量,并初始化為最大值n++; //n現(xiàn)在是多少呢?

答案是-2147483648。很奇怪啊,一個正數(shù)加1竟然變成了負數(shù)。再仔細看看,這個負數(shù)就是int類型的最小值,也就是說在int類型的最大值上加1,就變到了最小值。所以老祖宗說物極必反嘛。

怎么理解呢?由于int類型的最大值為2147483647,最小值為-2147483648,那么對于它來說,這兩個數(shù)就相當于正無窮大和負無窮大,我們可以想象一條數(shù)軸,本來是一條直線,我們將這條直線兩頭接到一起,形成一個圓。那么正無窮大加1就來到了負無窮大,負無窮大減1就來到了正無窮大。這種現(xiàn)象就叫做整數(shù)溢出。

如果發(fā)生整數(shù)溢出,計算結(jié)果就不可靠。我們在計算的時候要選取合適的數(shù)據(jù)類型,確保能夠裝得下計算結(jié)果,不發(fā)生溢出。如果計算結(jié)果是正數(shù),但是超過了int的上限,我們可以考慮上限更大的unsigned int來保存,由于不用表示負數(shù),unsigned int表示正數(shù)的上限是int的兩倍。

如果定義一個unsigned int型變量,并初始化為它的最大值,然后加1,會變成多少呢?顯然會變成0。我們寫一小段代碼試一下:

#include #include #include //包含這個頭文件,不寫好像也沒問題int main(){ unsigned int n = UINT_MAX; //宏定義,表示 unsigned int的最大值 n++; printf("%u",n); //輸出unsigned int類型要用%u轉(zhuǎn)換說明符 system("pause"); return 0;}

運行結(jié)果

代碼里的UINT_MAX是一個宏定義,定義在limits.h這個文件內(nèi)。前面小貓所寫的上下限都是在這個文件內(nèi)看到的。下面這幾行是從limits.h中截取的。

#define INT_MIN (-2147483647 - 1) #define INT_MAX 2147483647#define UINT_MAX 0xffffffffU

以后我們就用INT_MAX,INT_MIN來表示int型變量的上下限,這樣方便多了。

整數(shù)溢出會帶來一個麻煩,那就是C語言中的時間。前面小貓已經(jīng)知道在64位系統(tǒng)中,time_t類型實際上是long long類型,long long類型上限為9223372036854775807,這是個非常大的數(shù)字,不用太擔(dān)心。但在32位系統(tǒng)中,time_t類型實際上是long類型,只占4個字節(jié),上限和int一樣,也就是21億多,如果達到了最大值,時間就歸零啦。小貓算了一下,大概是2038年吧,不過現(xiàn)在64位已經(jīng)普及了,就不用擔(dān)心了。

就到這里啦。開心。

C語言學(xué)習(xí)日記

總結(jié)

以上是生活随笔為你收集整理的语言余一个负数_C语言学习日记(8)——整数溢出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。