精華區beta C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) - Lubuntu 15.10 + gcc 5.2.1 - Raspbian + gcc 4.9.2 問題(Question): 我正在測試用RF module接收訊號然後轉成我要的char variable 大概是這樣: 輸入值:unsigned char (前4bit跟後4bit各代表數值a, b) 輸出值:兩個signed char 餵入的資料(Input): unsigned char varible (0-255) 預期的正確結果(Expected Output): char varible (-128-127) 錯誤結果(Wrong Output): 我用筆電+gcc 5.2.1跑出來數值是正確的 0, 0, 0, -1, -1 0, 1, 16, -1, 0 0, 2, 32, -1, 1 0, 3, 48, -1, 2 0, 4, 64, -1, 3 1, 0, 1, 0, -1 1, 1, 17, 0, 0 1, 2, 33, 0, 1 1, 3, 49, 0, 2 1, 4, 65, 0, 3 2, 0, 2, 1, -1 2, 1, 18, 1, 0 2, 2, 34, 1, 1 2, 3, 50, 1, 2 2, 4, 66, 1, 3 3, 0, 3, 2, -1 3, 1, 19, 2, 0 3, 2, 35, 2, 1 3, 3, 51, 2, 2 3, 4, 67, 2, 3 4, 0, 4, 3, -1 4, 1, 20, 3, 0 4, 2, 36, 3, 1 4, 3, 52, 3, 2 4, 4, 68, 3, 3 可是用RPi + gcc 4.9跑出來變成unsigned char 0, 0, 0, 255, 255 -> 255 應該是unsigned char才有可能 0, 1, 16, 255, 0 0, 2, 32, 255, 1 0, 3, 48, 255, 2 0, 4, 64, 255, 3 1, 0, 1, 0, 255 1, 1, 17, 0, 0 1, 2, 33, 0, 1 1, 3, 49, 0, 2 1, 4, 65, 0, 3 2, 0, 2, 1, 255 2, 1, 18, 1, 0 2, 2, 34, 1, 1 2, 3, 50, 1, 2 2, 4, 66, 1, 3 3, 0, 3, 2, 255 3, 1, 19, 2, 0 3, 2, 35, 2, 1 3, 3, 51, 2, 2 3, 4, 67, 2, 3 4, 0, 4, 3, 255 4, 1, 20, 3, 0 4, 2, 36, 3, 1 4, 3, 52, 3, 2 4, 4, 68, 3, 3 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> int main(void) { unsigned char a, b, c; char d,e; for (a=0; a<5; ++a) { for (b=0; b<5; ++b) { c = (b<<4)+a; d = (char) (c&0xF) -1 ; e = (char) ((c>>4) & 0xF) -1; printf("%d, %d, %d, %d, %d\n", a,b,c,d,e); } } return 0; } 補充說明(Supplement): 請問這是gcc 4.9的bug嗎? 我不知道是不是該換成gcc5... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.200.141.244 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1454608909.A.419.html
pikachu2421: char沒有定義一定是signed或unsigned 會受環境影響 02/05 04:17
pikachu2421: 要確定是signed就宣告signed char 02/05 04:17
LPH66: 樓上正確, 而且事實上 char, signed char, unsigned char 02/05 05:04
LPH66: 這是三種型別, 不是兩種; char 雖然會二選一但不等同於他們 02/05 05:05
wtchen: 那請問char會怎麼決定自身是unsigned 還是signed? 02/05 05:22
flere: 由compiler來決定的 02/05 07:36
dorgonman: cppflag可以設參數強制要用那一個 02/06 18:35
dorgonman: -funsigned-char or -fsigned-char 02/06 18:36
wtchen: 感謝~~ 02/06 21:20