Re: 請問有沒有compiler option 可以用來忽略sign ?
我找到解法,
/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>
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章