線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:901
推到 Plurk!
推到 Facebook!

問一個字元輸出問題?

尚未結案
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-07 18:42:31 IP:163.28.xxx.xxx 未訂閱
請問底下程式碼為何輸出是-128?    
#include 
int main(int argc, char* argv[])
{
  char a=-128;
  printf("%d",a);
  return 0;
}
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-07 19:23:04 IP:61.56.xxx.xxx 未訂閱
插花一下~~ 底下這鍋try try see ㄅ  < class="code"> #include #pragma argsused int main(int argc, char* argv[]) { char a; int x1; printf("\t\t ASCII Check...\n",x1,a); for(x1=-130 ;x1<130 ;x1 ) { a=x1; printf("%d = %c \t",x1,a); } getch(); return 0; } ===三人行必有我師焉===
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-07 21:55:33 IP:163.28.xxx.xxx 未訂閱
Sorry呀,我一開始就把程式打錯了..多一個負號.. 正確如下,各位如果知道的話就告訴我為何輸出會是-128吧.
#include 
#include 
int main(int argc, char* argv[])    {
 char a=128;
 printf("%d",a);
 getch();
 return 0;
}
發表人 - nlj859 於 2004/07/07 21:58:22
whwu
一般會員


發表:0
回覆:10
積分:12
註冊:2002-08-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-07 22:13:54 IP:210.63.xxx.xxx 未訂閱
signed有號數(-128~127)或unsigned無號數(0~255)有關,要視實作的環境。 可以宣告成︰ unsigned char a=128; 試試
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-07 22:30:37 IP:163.28.xxx.xxx 未訂閱
請問視實作的環境是什麼意思? 意思是說在某些環境就不管有無宣告signed或unsigned就會自動幫你改成unsigned嗎?
whwu
一般會員


發表:0
回覆:10
積分:12
註冊:2002-08-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-07 23:19:44 IP:210.63.xxx.xxx 未訂閱
1.c++定義unsigned char為0~255,signed char為-128~127。 2.請看編譯器中的定義。
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-07 23:36:56 IP:163.28.xxx.xxx 未訂閱
有沒有辦法用debug方式去證明C Compiler所compile出來就是這種結果呢? 或是有其它辦法呢?
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-08 15:04:04 IP:61.56.xxx.xxx 未訂閱
原來你要問的是這個問題, 這鍋東東叫做"溢位", 因為Char是宣告一個能儲存8bit的空間, 也就是-128~127(256種變化), 而 128大於127,所以這種情形叫做"溢位", 這要用補數的觀念來解決這個問題... 剛剛隨便到google找一下就有一堆了.. 底下這篇的中間有提到這個問題,請前往看看ㄅ~ http://www.mis.kyit.edu.tw/learn/classnote/co/chapter1.HTM  
引言: 有沒有辦法用debug方式去證明C++ Compiler所compile出來就是這種結果呢?
int main(int argc, char* argv[])
{
  char a;
  int x1,x2;
  printf("\t\t ASCII Check...\n",x1,a);
  for(x1=-130 ;x1<150 ;x1++)
   {
    a=x1;
    printf("%d = %d \t",x1,a);
   }
  getch();
  return 0;
}
 
得到的結果....如下: ===三人行必有我師焉===
系統時間:2024-11-22 22:04:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!