看板 NTUBIME101HW 關於我們 聯絡資訊
因為教授上課好像沒仔細提到 所以在這裡提一下 大家常用到的變數有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