作者ck940560 (小弼)
看板NTUBIME101HW
標題Re: [C++] 變數型態簡述
時間Sun Oct 26 22:17:07 2008
附上測試過後的各種變數值域(僅整數),
short -32768~32767 共2^16個數(2Byte)
int -2147483647~2147483647 共2^32個數(4Byte)
long int -2147483647~2147483647 同上
long long int -9223372036854775808~9223372036854775807 共2^64個數(8Byte)
float -16777216~16777216 不含小數共2^26個數(4Byte)
double -9007199254740992~9007199254740992 不含小數共2^54個數(8Byte)
long double -9007199254740992~9007199254740992 同上
unsigned short 0~65535 共2^16個數(2Byte)
unsigned int 0~4294967295 共2^32個數(4Byte)
unsigned long int 0~4294967295 同上
unsigned long long int 0~18446744073709551615 共2^64個數(8Byte)
unsigned float 0~4294967295
unsigned double 0~4294967295
unsigned long double 0~9007199254740992
long int 基本上就是int、long double 也跟 double一樣。
兩個long才會真的擴充,但是double不像int可以加兩個long。
C++裡面unsigned不能搭配float 和 double,
用了的話會出現警告,不過還是可以用。
以上是整數的測試結果,小數的話比較難測試出範圍,
所以....將就用吧!
需要長一點的顯示範圍還是得用矩陣來表示,
這個以後應該會學到。
題外話,剛剛發現按shift+Backspace可以只刪一個中文字,
分享一下,不然一次退兩格真的很.....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.245.218
推 sb0917:我想應該是學不到用陣列表示...大數練習蠻重要的 10/26 22:21
→ ck940560:對了,你知道為什麼short顯示32768會變-32768嗎? 10/26 22:24
→ ck940560:32769會變-32767 32770變-32766 65536變0 10/26 22:24
→ ck940560:int 也會有這種情況 10/26 22:25
→ sb0917:因為負數是-1~-32768 正數是0~32767 0當正數 10/26 22:28
→ sb0917:至於32769是因為換成二進位會變成32767的補數~ 10/26 22:29
→ sb0917:第一格是正負號~所以後面補數是多少就會變負多少 10/26 22:29
→ sb0917:你可以用二進位基數印出來就知道了 10/26 22:31
→ sb0917:其實這只是overflow的異常結果,只是剛好湊成對而已~ 10/26 22:35
→ ck940560:32769是1000000000000001' 10/26 22:39
→ ck940560:32767是111111111111111 10/26 22:39
→ sb0917:000000000000001和111111111111111有關係吧~看的出來的 10/26 22:47
→ sb0917:可以去看二的補數加一~這是目前負數表示的方法 10/26 22:48
→ ck940560:1跟0互換 但是為什麼第一個沒有? 10/26 22:55
→ sb0917:第一格是拿來表示正負號的... 10/26 22:56
→ ck940560:不是左邊第一個嗎? 10/26 23:00
→ sb0917:補數加一~ 10/26 23:02
→ ck940560:嗯....難怪電腦會搞錯 兩個數有一樣的顯示方法 10/26 23:09
推 xx7983:囧!!!!!!!!!!你們是在講什麼語言!!!!!!!!!!!!!!! 10/27 06:55
→ ck940560:C語言-.- 10/27 13:07