Re: [問題] char與int
※ 引述《lopohsiung (年輕的心)》之銘言:
: 大家好!小弟使用的程式語言是VC++2010,近來使用寫程式遇到一個問題,很需要清楚明白的知道
: 為什麼,故來請教各位高手。
: 程式碼很短:
首先請使用 std::numeric_limits<T> 來印出型別資訊
typedef numeric_limits<char> CharLimits;
typedef numeric_limits<int> IntLimits;
if( CharLimits::is_signed )
cout << (int)CharLimits::max() << endl;
else
cout << (unsigned)CharLimits::max() << endl;
cout << boolalpha << CharLimits::is_signed << endl;
cout << IntLimits::max() << endl;
cout << boolalpha << IntLimits::is_signed << endl;
以我的例子來說, 輸出如下:
127 <- char 最大值為 127
true <- char 為有號數
2147483647 <- int 最大值為 2147483647
true <- int 為有號數
知道你所使用的平台上, 各型別真正的最大值之後, 再來作以下推
導 (因為都是有號數, 下列方法是常用的和無號數同樣作法, 不是
絕對):
1: char a;
2: int b,c;
3: c=49676;
4: a=c;
5: b=a;
: cout<<b<<endl;
: cout出來的b是12。
line 4. 因為 char 最大值小於 49676, 所以 a 得到
49676(int) = 49676 % (127+1)(char) = 12
取模是為了能產生該型態能儲存的合法數值
: 假如c=32268,也就是:
: char a;
: int b,c;
: c=32268;
: a=c;
: b=a;
: cout<<b<<endl;
: cout出來的b是12。
32268 % (127+1) = 12
: 假如c=29967,也就是:
: char a;
: int b,c;
: c=29967;
: a=c;
: b=a;
: cout<<b<<endl;
: cout出來的b是15。
29967 % (127+1) = 15
: 假如c=2320,也就是:
: char a;
: int b,c;
: c=2320;
: a=c;
: b=a;
: cout<<b<<endl;
: cout出來的b是16。
2320 % (127+1) = 16
: 到底是為什麼呢?小弟知道char的儲存空間是1byte,儲存值範圍為-128~127,int的話,
: 書上寫在32位元系統下儲存空間、範圍與long相同,也就是儲存空間是4bytes,儲存值範
: 圍是-2147483648~2147483647,隱約覺得跟儲存值範圍有關,但確切的原因,電腦到底是
: 怎麼算的?為什麼cout出來的b會是這樣?能否請知道的大大解說一下?非常感謝!!!
: 對了!補充一點,小弟的電腦是win7 64位元。
你是用 C/C++ 寫程式, 所以要考慮的應該是語言裡的運算/轉型規
則, 如果沒有明確定義的才去探討 gen 出來的組語及編譯器實作.
最大值最小值是這樣求來的, 不是看書講的
--
≡≡≡≡╔═══╗╔═══╗ ◎ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗≡≡≡≡
≡金栽經║ ╔╗ ║║ ╔╗ ║╔╗║ ║ ║║ ═ ║║ ╔╗ ║║║ ║║RAINNOUS
≡≡≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║≡≡≡≡
≡≡≡≡║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║≡≡≡≡
≡高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧≡
≡≡≡≡≡趙賢榮≡≡≡金智淑≡≡≡RAINBOW≡≡≡盧 乙≡≡≡吳勝雅≡ψmocki
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.213
→
05/13 17:36, , 1F
05/13 17:36, 1F
推
05/13 17:38, , 2F
05/13 17:38, 2F
→
05/13 17:41, , 3F
05/13 17:41, 3F
→
05/13 17:41, , 4F
05/13 17:41, 4F
推
05/13 17:41, , 5F
05/13 17:41, 5F
→
05/13 17:42, , 6F
05/13 17:42, 6F
→
05/13 17:42, , 7F
05/13 17:42, 7F
→
05/13 18:00, , 8F
05/13 18:00, 8F
※ 編輯: loveme00835 來自: 140.121.221.213 (05/13 18:02)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章