作者youngxd (yo)
看板C_and_CPP
標題[問題]int可存的變數大小
時間Sun Mar 31 16:40:06 2013
我用的是C++
因為助教DEMO的數字是超過十位數
所以我用正常數字下去跑的時候都OK
用DEMO數字跑就變成-XXX
是把int改成unsigned int 嗎??
我改了之後還是不行說><
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.136.219
推 o07608:型態換成long試試看? 03/31 16:40
推 o07608:int 和 unsigned int 的最大最小差距都是一樣的 03/31 16:44
→ o07608:差別只在於他們前面有沒有負號而已 03/31 16:45
→ o07608:int 的範圍是–2,147,483,648 to 2,147,483,647 03/31 16:45
→ o07608:unsigned int 則是 0 to 4,294,967,295,就只是差在這裡 03/31 16:46
推 o07608:欸.....剛剛發現long的範圍和int一樣大,糗了 03/31 16:49
→ o07608:換成long long int? 03/31 16:49
→ loveme00835:用 std::numeric_limits<T> 來取得一個型別的所有資訊 03/31 16:55
→ loveme00835:即使名稱是一樣的內建型態, 能存的值範圍也不同, 尤其 03/31 16:56
→ loveme00835:特別的是雖然 sizeof(T) == 8 也不一定代表全部的 32 03/31 16:57
→ tjjh89017:好奇long存在的意義? unsigned long long int 超贊xD 03/31 16:57
→ loveme00835:位元都會被用到, 超過這個值域範圍如果還想要格式化輸 03/31 16:57
→ loveme00835:入到變數裡那就會炸 03/31 16:58
→ loveme00835:視需求使用最 compact 的型別, 不是數值愈大愈好, 雖 03/31 17:01
→ loveme00835:然大一點的數字型別可以做更多的事, 但有時候使用大整 03/31 17:02
→ loveme00835:數或是字串說不定解問題更貼切. 再過幾年大整數就要進 03/31 17:04
→ loveme00835:裡 fixed size integers 或是像 __uint128_t 都能在型 03/31 17:06
→ loveme00835:別上說明更多事情, 多再多 long 並不能解釋它究竟多 03/31 17:07
→ loveme00835:'long' 03/31 17:07
推 o07608:受教了 m(_ _)m,原來還要顧慮這麼多...... 03/31 17:08
→ loveme00835:修正: sizeof(T) == 4 03/31 17:08
→ hpps:在x86 64位元的電腦下的long好像是 8 bytes 03/31 19:26
→ hpps:記得以前寫比較低階的程式,常常要算記憶體位址,但是指標在 03/31 19:33
→ hpps:32位元的OS上是32bit,到64位元又不一樣,這時候都用long來 03/31 19:33
→ hpps:做指標的運算。 03/31 19:34
推 littleshan:不要用int或long來存指標 除非你想刻意做成無法移植... 03/31 21:44
→ hpps:存是不會,算的時候會用 03/31 22:04
→ MOONRAKER:SUPER LONG 03/31 22:35
→ MOONRAKER:8-byte long也要用到64-bit compiler才有 03/31 22:36
→ MOONRAKER:抱歉,compiler要可以編出64-bit binary 03/31 22:37
→ robinliao:Liunx的話,可以用下面的命令查最大值: 04/01 00:47
→ robinliao:g++ -E -dM - < /dev/null |grep MAX 04/01 00:48