C++ CHAR 8位問題

2012-11-25 8:25 pm
char i=1111
i=i+1
答案會係88

我問朋友
佢話
i%256=88

但1111%*256都唔係88

點解係咁?

i=255
i=i+1係0...
更新1:

一個定義為char的variable就會佔用1個byte。最小為0,最大為255。 姐係數字最大係255? 如果當英文係咪255個字? int存取英文又可不可以? 點解chat 佔1Byte但只係得0~255 int 4byte但可以負2e - 2e 而且我睇書話int儲存範圍為2^32 / 2 因為要分另一半儲存負整數 咁即係點? 係咪int 最多係1e幾? 我見取大係long double 有12byte 咁即係存到幾多位 我當佢係1000e 如果有個數係10000000e,咁樣會點做? 我學左c幾日,連入門菜鳥都唔算,唉

回答 (1)

2012-11-26 3:08 am
✔ 最佳答案
首先係要明白電腦儲存variable的數值一定係以byte為單位。
一個定義為char的variable就會佔用1個byte。最小為0,最大為255。
定義為integer的variable,佔用32bit,即4個byte。沒有標示unsigned,會有一半為負數。即最大約2億幾,最小為負2億幾。
(但這個完全由compiler及系統決定,部份新式己把integer定為64bit。而一些給mcu用的可能只佔2byte,這裡我們當住32bit先)
如果加入unsigned,即不要負數,數值為0至4億幾。
如果你根本不需要咁大,可以定義為short integer,只佔2byte。數值由約正負3萬,或者0至65535(unsigned)。
至於幾時用邊種,由編程者全權決定。只係數1至幾百,用short integer最好,因為program輕巧一點。
用char,一般不當成數字。用來存放一個英文字母。當數字用,大部份c程式不會當成syntax error。後果由編程者負責。
注意係overflow時,不會產生runtime error,溢位及借位等一概不理。即係如1個byte,最大255,加1會變成0。0減1則變255。(只有除0時會error)
回到你的問題。
char i=1111,其實i只會預設為87。
計算為1111 除256取餘數,得87。句子i=i+1,答案為88,絕對正確。

『朋友話i%256=88』
計算沒錯,但實情以我以上所講先o岩,因為i根本不能大過255。

『但1111%*256都唔係88』
有個星號完全不同

『i=255
i=i+1係0...』
結論正確。只係,你既然要計算,為何不用int ?起碼數字幾萬以內都不會出現你的問題。
不過如果你明我先前所討論,知道有overflow呢回事,就算integer都會出現加1後變成0,也許不會感奇怪。



收錄日期: 2021-04-23 22:07:33
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20121125000051KK00136

檢視 Wayback Machine 備份