[爆卦]c資料型態大小是什麼?優點缺點精華區懶人包

為什麼這篇c資料型態大小鄉民發文收入到精華區:因為在c資料型態大小這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者sb0917 (QQ)看板NTUBIME101HW標題[C++] 變數型態簡述時間Sun Oct...


因為教授上課好像沒仔細提到

所以在這裡提一下

大家常用到的變數有int,float,double,char

這篇先撇開char不講

int 整數 4byte

float 單精度浮點數 4byte

double 倍精度浮點數 8byte

1byte = 8bit

1bit可以表示一個0 or 1

------

簡略二進位

一個二進位資料:1001

從最右邊開始依序為2^0,2^1,2^2....

這是一個byte:

128 64 32 16 8 4 2 1
┌─┬─┬─┬─┬─┬─┬─┬─┐
│ 0│ 0│ 0│ 0│ 1│ 0│ 0│ 1│
└─┴─┴─┴─┴─┴─┴─┴─┘

所以1001 = 1x2^0 + 0x2^1 + 0x2^2 + 1x2^3 = 9

------

int 整數型態

int有4byte意即有32bit

而最左邊的的那個bit是拿來表示符號的

即0為正數 1為負數

至於負數的運算要牽涉到補數 這就不提了

而後面剩下那31bit才是拿來表示數字用的

故int正數最大只能表示至2^31

這時候會有人說那加unsigned就好啦

這裡有個概念很重要

unsigned,long,short這些東西不是資料型態

他們叫作「修飾字」,是用來表述他們所修飾的變數的

所以unsigned int意思就是

「把前方那個表示符號的位元取消」

所以他才能表示正數到2^32 他並非讓int變兩倍,而只是平移整個範圍而已

long才是變兩倍 不過事實上好像long long int才是8byte(64bit)...

long int跟int好像一樣大的樣子...(in ANSI C / C++)

------

float 單精度浮點數型態

float有4byte 很多第一次看到的人會嚇到

為什麼跟int一樣的大小,但是卻能表示出比int還大出許多的數值

原因是他利用bit的規則不一樣

同樣的最左邊那個bit是拿來表示正負號

但是接著那個bit後方的位元不是全部都拿來表示數字

|--1--|-------8--------|-----------------23-------------------|
正負 10^x 數字部分

他是這樣表示的

所以他精度只有2^23 = 8388608 意思就是他能表示準確的數字只有七位

所以雖然他能表示比int大的數字

但是一點也不準確

而為何pi還是可以算到小數第十六位?

因為這是ANSI C/C++規定的

-------

double 倍精度浮點數

跟Float一樣,只是大小變兩倍,規則就不用說了

他能表示2^52 = 4503599627370496 精準值十六位

特別要說的是long double

他是12byte

照理說他應該可以突破十六位的值

但為什麼當初印pi卻到十六位就停了呢?

一樣 因為這是規定 小數運算就只能到十六位

--------

以上是一些基本的計算機概論

如果有興趣的同學可以自己找書翻翻

希望這些對大家有幫助

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.105.20
※ 編輯: sb0917 來自: 125.232.105.20 (10/26 20:05)
typenephew:這篇文章值336銀 10/26 21:47
zumwohl:你作弊喔.... 10/26 22:05
sb0917:P幣只有養小雞有用...你要我送你... 10/26 22:12
NBASCIDM:我PO個考古題就468了XD 10/26 22:13
sb0917:大家都愛養小雞 10/26 22:17
ck940560:《經濟狀況》普通 ←1000up會變普通 10/26 22:18

你可能也想看看

搜尋相關網站