2014-03-25 138 views
3

(編輯改變C/C++到C)char和unsigned char有什麼區別?

請幫我找出一個乾淨的澄清charunsigned char在C.特別是當我們的嵌入式設備和普通PC機(緩衝區之間的差異之間傳輸數據unsigned char和普通char)。

+3

沒有C/C++這樣的東西。您可以使用C或C++,但不能同時使用這兩種。選擇你想問的一種語言。在C中,區別在於簽名。 'char'可以用實現定義的方式進行簽名或無符號簽名,而'unsigned char'顯然總是無符號的。 – user3447428

+0

在編碼或解碼操作中,我可以知道char和unsigned char類型的區別和作用。 ? –

+2

@ user3447428雖然它們確實是不同的語言,但它確實沒有任何意義去問「C/C++」是如何工作的,這兩種語言在涉及「char」時的行爲都完全相同...... – Lundin

回答

8

你在問兩種不同的語言,但在這方面,兩者的答案(或多或少)是相同的。你真的應該決定你正在使用哪種語言。

差異:

  • 他們是不同類型的
  • 它的實現定義char是否帶有符號

相似之處:

  • 它們都是整數類型
  • 他們是相同的大小(一個字節,至少8位)

如果你只是使用它們來傳輸原始字節值,沒有算術,那麼沒有實際的區別。

+0

如果我考慮'C'語言我可以在編碼或解碼操作期間知道char和unsigned char類型的差異和影響。 ? –

+0

唯一真正的區別是'unsigned char'沒有明確的簽名,'char'可能被簽名也可能不被簽名。 (這是_implementation defined_ char'是否是有符號或無符號的,這意味着它可以完全處於編譯器編寫器的意願之中,但編譯器必須記錄它是哪一個。)處理原始數據時,應該明確使用'unsigned char'。處理有意義的數據時,應根據數據的含義選擇簽名類型或未簽名類型。如果數據的符號完全不相關,請使用普通的'char'。 –

3

char類型是特殊的。它不是一個無符號的字符或一個有符號的字符。這些是三種不同的類型(int和signed int是相同的類型)。一個char可能有一個有符號或無符號的表示。

從3.9.1基本類型

平原字符,符號的字符,和unsigned char三種不同類型。 A char,signed char和unsigned char佔用相同數量的 存儲並具有相同的對齊要求(3.11);也就是說,它們 具有相同的對象表示。

+0

Hi Dieter,在硬件級別(在設備驅動程序開發中)完成的編碼或解碼操作期間是否有對_char_和_unsigned char_的任何考慮? –

+0

謝謝,我澄清了。 –

相關問題