32位的int型與double型表示的數值範圍為何不一樣

時間 2021-09-02 02:40:47

1樓:

int表示整數,double表示雙精度浮點數。

1、int

同樣的32位,如果表示整數也就是沒有小數位,那麼可以表示的整數範圍大約是 ±2的31次方-1,差不多就是int的表示範圍;

2、double

而對於浮點數,比如根據ieee754浮點數表示方法中規定了,32位浮點數,第1位是符號位,第2到9位(共8位)表示階碼,剩下23位表示尾數。

那什麼是階碼?比如,我們一個十進位制數123可以表示為1.23x10的2次方,那麼這裡的2次方就可以理解為階碼。

那麼8個bit的數位,可以表示多大的階碼呢?階碼也是有符號位的,那麼8個bit的有符號位的數的取值範圍是-127到128之間,而階碼是以2為底數的,所以階碼值-127就表示2的-127次方,就表示很小很小的一個小數了,而+128就表示2的128次方這麼大的數了。

浮點數的尾數左邊隱含一個數字1,也就是1.000...000(23個0)到1.

111...111(23個1)二進位制數表示的小數,差不多理解為1.00000到1.

999999之間的十進位制小數。

因此:浮點數就可以表示為 (2的-127次方)*1.x 到 (2的128次方)*1.x,大約是1.7*10的-38次方 到 3.4*10的38次方。

(因為涉及到反碼和補碼等的轉換,以上數值均為約數,不能作為正式的參考,只是讓你理解一下32位為什麼表示的整型數和浮點數範圍差別會那麼大。不知道我說的是不是正確的,但是大致意思如此,你要完全弄清楚,可以檢視一下ieee754浮點數的表示規則。)

2樓:放貓抓老虎

int與doule在不同的系統數值範圍不一樣,有的系統int是16位,double是32位,有的系統int是32位,double是64位。但是同一系統中int與double數值範圍肯定不一樣的。

c語言double和int有什麼區別?各個表示範圍是多少?

3樓:蛙家居

double是雙精度實型數(小數),int為整型,整型[signed]int -2147483648~+2147483648,雙精度double 1.7 x 10^(-308)~ 1.7 x 10^(+308) 。

1、int 有符號整數,根據系統(編譯器)不同,有不同的範圍,16bits系統(dos系統):-(2^15)到(2^15-1),32bits系統:-(2^31)到(2^31-1),64bits:

-(2^63)到(2^63-1)。如果是無符號整數unsigned int,那麼16bits系統(dos系統):0到(2^16-1),32bits:

0到(2^32-1),64bits:0到(2^64-1)。

2、double為雙精度浮點型,能準確到小數點後十二位,1.7 x 10^(-308)~ 1.7 x 10^(+308)。

3、因為所有的計算機語言,每個型別都向更精確的方向去自動轉。比如說,int能自動轉double型,但是倒過來就不行,必須強制轉。

4樓:匿名使用者

區別:double雙精度浮點數,就是有小數點的數,並且範圍大於intint整型,只能表示整數

它們的範圍隨著機子不同而不同,如在32位機子和64位機子,它們是不同的。32位機int(-2^31 ~ 2^31)和64位機int是不同的。

double可以表示負數

c語言 有關double型取值範圍的問題

5樓:金色潛鳥

double型取值範圍 查你的編譯器的標頭檔案 float.h#define dbl_epsilon 2.2204460492503131e-016 -- 最小解析度

#define dbl_max 1.7976931348623158e+308 -- 最大值

隨編譯器和機器而變。

程式運算過程中的範圍有限制。例如 i*i 允許的 i 就很小了。

同樣,double 運算,也會縮小 a 的允許範圍。

6樓:宛丘山人

1.浮點數賦初值最好採用:result=0.0

2.格式符l用於長整形,也可用於d,o,x,u前面,但用在f前面無效,所以你的輸出還是浮點數的標準格式。

3.f格式符用來輸出實數,以小數形式輸出,因為你沒有指定欄位寬度,所以按系統自動指定,使整數部分全部如數輸出,並輸出6位小數。應當注意,並不是輸出的都是有效數字,的精度的有效數字是7位有效數字,雙精度是15位有效數字,只輸出6位小數。

這就是你輸出小數總是6位的原因。你說的總是精確到小數後6位是不對的,因為輸出的數不一定是準確的。

4.指定輸出格式的方法是:%m.nf。你那個lf是沒用的。意即輸出的資料共佔m列,其中有n位小數。如果總長不足m,則左端補空格,即向右靠齊。

5.如想向左靠齊,則用格式:%-m.nf。

你試一下看,這些譚浩強的《c程式設計》第1版講得很清楚,你可以找來看看。

7樓:空雪夢見

用%g就可以去掉後面一堆0。對於double來說,取值可以到1後面300個0那麼大,不過這不重要,重要的是「有效數字」,double更重要的是「有效數字」(和數學上的有效數字意思相同):52位二進位制數,差不多15個十進位制數字

8樓:匿名使用者

大概是這樣。

具體double的取值請查書去。。反正是個非常大的範圍。

至於輸出結果是六位小數,那顯然不是double的範圍。是printf的問題,人家預設輸出六位小數。你加些引數就會瞬間大好多。

比如 %20.15lf ,就是15位小數了。還可以加個什麼玩意弄成科學計數法什麼的好像

c++中int型的數限制的話是表示的數的範圍,而double或者float限制的是數的位數,是這樣嗎?

9樓:無法無天

數的表示都是二進位制0和1,只不過c++中有規定,double至少和float一樣大,float至少和int一樣大,他們都是有範圍的,實際就是位數的問題,現在int一般是32位還是64位,我忘了,都是因系統而異。

10樓:xc望心闖天下

不是,double float也是有範圍的,不過範圍遠比int型的大罷了,而且後兩個一個是雙精度,一個是單精度,是可以有小數的

C語言,int與double的問題,求助

這個解釋起來還真是麻煩。需要你瞭解計算機中浮點數的表示方式。由於計算機以2進位制儲存資料,所以小數用2進位制儲存的時候,就變得非常麻煩。我們知道 1 2 0.5 1 4 0.25 1 8 0.125 1 16 0.0625 1 32 0.03125 1 64 0.015625 以小數點為分界線,從左...

c語言,簡單的double和int的問題,求救啊

滄海雄風 把if後面的 去掉 看好 你三個if判斷後面都有 否則就與後面的 構成了一個空的 if x 20 等價於i if x 20 有問題請追問 滿意記得采納 你的if語句後面根本就什麼也沒做,因為 使得if語句提前結束了,改為這樣就對了 include int main if x 20 x 10...

win764位與32位系統的字型是否有區別

沒有,區別在於64速度傳說快一點,不過也沒有明顯差異一般情況下,64比32省一點電貌似。如果你的電腦記憶體4g以上 cpu達標可以使用64的建議按64位的,因為32位系統4g以上記憶體不能完全使用,只能識別使用3.5g左右 win7 64位 部分軟體和文件字型顯示亂碼!求大神解決! 解決的辦法是 在...