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型的變數

程振 會將int型別轉換成double型別再與double型別的變數相加。型別不一樣的數相加,首先將型別轉換成一樣的然後相加,轉換原則,短型別向長型別看齊,長短指在記憶體中所佔空間的長短 得出的結果是double型.這個不需要強制轉換的,系統會自動轉換的. double,計算時會自動轉化之doubl...

c語言中int型變數與char型變數什麼情況下不能互換

其實這種問題,從表面說也沒有什麼特別的意義,因為本來就沒有什麼嚴格意義上的能不能互換的問題。只要能在使用過程中,滿足本來的要求就可以了。例如 在將int型變數轉換為char型時,要考慮到資料的溢位問題等 char轉換為int時,要考慮到它的符號問題。在根本上只要認清它們兩者之間的區別就可以了。int...

c語言中double和float型資料的表現形式

雙精度浮點 double 型,佔8 個位元組 64位 記憶體空間。其數值範圍為1.7e 308 1.7e 308,雙精度完全保證的有效數字是15位,16位只是部分數值 而單精度保證7位有效數字,部分數值有8位有效數.c 標準要求 float 型別至少要能精確表示到小數點後6位,並且整數部分的表示範圍...