Re: 請問有沒有compiler option 可以用來忽略sign ?

看板Programming作者時間18年前 (2006/06/19 17:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
我找到解法, /J (Default char Type is unsigned) ====================================== This option changes the default char type from signed char to unsigned char, and the char type is zero-extended when widened to an int type. If a char value is explicitly declared signed, the /J option does not affect it, and the value is sign-extended when widened to an int type. The /J option defines _CHAR_UNSIGNED, which is used with #ifndef in the LIMITS.H file to define the range of the default char type. Neither ANSI C nor C++ requires a specific implementation of the char type. This option is useful when you are working with character data that will eventually be translated into a language other than English. ==> 在 LPH66.bbs@ptt.cc (小心課業閉鎖空間...) 的文章中提到: > ※ 引述《xiaudai.bbs@bbs.cis.nctu.edu.tw (小呆)》之銘言: > : 請教各位, > : 在VC++裡, 以下程式的第 5 行並不會成立, 原因是 ch > : 已經被轉為負值, > : 但在某些老舊的compiler裡, 第5行會成立 > : 因為它直接做記憶體內容比對. > : 請問VC++裡有沒有compiler option可以忽略 sign ? > : 感謝 > : 1 void main() { > : 2 char ch, x=0; > : 3 > : 4 ch=0x81; > : 5 if(ch == 0x81) x=1; > if(ch == (char)0x81) x=1; > : 6 } > 這樣試試 > 因為如果我沒記錯的話 單純寫數字在VC++裡是視為int的 > 然後大範圍資料和小範圍資料是會把小的upcast到大的去比 > 於是它把char的0x81(-127)給upcast成int的0xFFFFFF81(也是-127) 再去比 > 把那個0x81強制變成char應該就可以成立了 -- * Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
文章代碼(AID): #14bcyO00 (Programming)
文章代碼(AID): #14bcyO00 (Programming)