Discussion:
[gcc] unsigned int i ; i 99;
(时间太久无法回复)
ªkÄõ§JªL
2004-02-12 14:50:59 UTC
Permalink
※ 引述《***@kkcity.com.tw (我是可愛的C++)》之銘言:
: 如標題 :
: int main(void) {
: unsigned int i;
: i = -99;
: printf("%d\n");
: }
: 在 debian 下, gcc 2.95.4 與 gcc 3.3.2 都不會告訴我錯誤
: (加了 -Wall 依樣)
: 可是這樣應該是不合乎 unsigned 的定義吧,我總是認為這樣的語法是錯的
: 為什麼 gcc 會讓我編譯通過ㄋㄟ?

應該是因為
unsigned 只是告訴 c compiler 第一個 bit 不要視為 sign
-99 gcc 會把它轉換成 11.....10011101
type 並沒有錯誤, 所以也就不會有 warning

printf("%d\n", i); 應該是印出一個滿大的數吧

--
平生無大志 但求六十分
--
※ Origin: 臺大電機 Maxwell 站 ◆ From: goodhorse.idv.tw
§Ú¬O¥i·RªºC++
2004-02-13 03:37:11 UTC
Permalink
Post by ªkÄõ§JªL
: int main(void) {
: unsigned int i;
: i = -99;
: printf("%d\n");
: }
: 在 debian 下, gcc 2.95.4 與 gcc 3.3.2 都不會告訴我錯誤
: (加了 -Wall 依樣)
: 可是這樣應該是不合乎 unsigned 的定義吧,我總是認為這樣的語法是錯的
: 為什麼 gcc 會讓我編譯通過ㄋㄟ?
應該是因為
unsigned 只是告訴 c compiler 第一個 bit 不要視為 sign
-99 gcc 會把它轉換成 11.....10011101
type 並沒有錯誤, 所以也就不會有 warning
printf("%d\n", i); 應該是印出一個滿大的數吧
printf 還是印出 -99.你可以試試看.
--
┌─────◆KKCITY◆─────┐  ╱  ╱   ̄ ▌ ̄  ̄ ╲╱ BBS 城邦
│ bbs.kkcity.com.tw │  ╲  ╲  ╴ ▌ ▌ ▏ KK免費撥接
└──《From:210.192.42.32 》──┘ http://www.kkcity.com.tw/freeisp/ 
My baby, my girl...
2004-02-13 04:18:21 UTC
Permalink
Post by §Ú¬O¥i·RªºC++
Post by ªkÄõ§JªL
應該是因為
unsigned 只是告訴 c compiler 第一個 bit 不要視為 sign
-99 gcc 會把它轉換成 11.....10011101
type 並沒有錯誤, 所以也就不會有 warning
printf("%d\n", i); 應該是印出一個滿大的數吧
printf 還是印出 -99.你可以試試看.
因為要印出unsigned要用%u.....

你用%d就會把它當作一般的整數印出來

--
 @, ●秘密情人● (bbs.cse.ttu.edu.tw) 
~\ ◆ Post From: 61-230-75-239.HINET-IP.hinet.net ◆

§Ú¬O¥i·RªºC++
2004-02-13 05:36:55 UTC
Permalink
Post by My baby, my girl...
Post by §Ú¬O¥i·RªºC++
printf 還是印出 -99.你可以試試看.
因為要印出unsigned要用%u.....
你用%d就會把它當作一般的整數印出來
阿,原來是這樣,對不起我錯了.
其實,我最希望的,還是gcc 可以稍微告訴我一下型別錯誤.
--
┌─────◆KKCITY◆─────┐  ╱  ╱   ̄ ▌ ̄  ̄ ╲╱ BBS 城邦
│ bbs.kkcity.com.tw │  ╲  ╲  ╴ ▌ ▌ ▏ KK免費撥接
└──《From:210.192.42.32 》──┘ http://www.kkcity.com.tw/freeisp/ 
老貢生
2004-02-13 08:45:02 UTC
Permalink
Post by §Ú¬O¥i·RªºC++
Post by My baby, my girl...
Post by §Ú¬O¥i·RªºC++
printf 還是印出 -99.你可以試試看.
因為要印出unsigned要用%u.....
你用%d就會把它當作一般的整數印出來
阿,原來是這樣,對不起我錯了.
其實,我最希望的,還是gcc 可以稍微告訴我一下型別錯誤.
因為那不是錯誤,你可以編譯下面的 source :

unsigned char n=-99;
printf("signed value is %d ,unsigned value is %d.\n",
(signed char)n,(unsigned char)n);

signed value is -99 ,unsigned value is 157
可見得在 char 的型態中,-99 == 157 ,兩個是同一個數,
你把這個數當作 signed 看就是 -99 ,把他當作 unsigned 看,
就是 157 。
ŠÑ­S
2004-02-13 05:49:36 UTC
Permalink
※ 引述《***@kkcity.com.tw (我是可愛的C++)》之銘言:
: ※ 引述《***@bbs.cse.ttu.edu.tw (My baby, my girl...)》之銘言:
: > 因為要印出unsigned要用%u.....
: > 你用%d就會把它當作一般的整數印出來
: 阿,原來是這樣,對不起我錯了.
: 其實,我最希望的,還是gcc 可以稍微告訴我一下型別錯誤.

加 -Wall 選項吧!
--
※ Origin: 臺大電機 Maxwell 站 ◆ From: h249-210-243-135.dialogue.com.tw
§Ú¬O¥i·RªºC++
2004-02-13 08:52:45 UTC
Permalink
Post by ŠÑ­S
: 阿,原來是這樣,對不起我錯了.
: 其實,我最希望的,還是gcc 可以稍微告訴我一下型別錯誤.
加 -Wall 選項吧!
早就加了,我原po已經說明了,還是沒用
--
┌─────◆KKCITY◆─────┐  ╱  ╱   ̄ ▌ ̄  ̄ ╲╱ BBS 城邦
│ bbs.kkcity.com.tw │  ╲  ╲  ╴ ▌ ▌ ▏ KK免費撥接
└──《From:210.192.42.32 》──┘ 電話:40586000 帳號:kkcity 密碼:kkcity 
¥¬€B¬Ã¥€¥[·ŠªG
2004-02-13 15:31:21 UTC
Permalink
Post by §Ú¬O¥i·RªºC++
Post by ŠÑ­S
加 -Wall 選項吧!
早就加了,我原po已經說明了,還是沒用
請爬gcc的manpage

你要用-Wconversion
-Wall並沒有啟動這個warning
--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: sakura.m3.ntu.edu.tw
§Ú¬O¥i·RªºC++
2004-02-16 02:46:23 UTC
Permalink
Post by ¥¬€B¬Ã¥€¥[·ŠªG
Post by §Ú¬O¥i·RªºC++
早就加了,我原po已經說明了,還是沒用
請爬gcc的manpage
你要用-Wconversion
-Wall並沒有啟動這個warning
非常謝謝你
--
┌─────◆KKCITY◆─────┐  ╱  ╱   ̄ ▌ ̄  ̄ ╲╱ BBS 城邦
│ bbs.kkcity.com.tw │  ╲  ╲  ╴ ▌ ▌ ▏ KK免費撥接
└──《From:210.192.42.32 》──┘ 電話:40586000 帳號:kkcity 密碼:kkcity 
继续阅读narkive:
Loading...