2012-11-19 58 views
1

我正在C做一些不錯的工作,而且我正在閱讀unsigned char。我使用這些變量的每個函數是否需要將一個無符號字符作爲輸入,或者因爲我將該值加載爲無符號,它會自動保持第一位爲正數?如果一個變量被聲明爲無符號,那麼與它相關的函數也必須是?

從本質上講,我需要做的:

int Test1(unsigned char input1) 
{ 
... 
} 

的一切,或將:

int Test2(char input2) 
{ 
... 
} 

就夠了?謝謝。

+2

不要被誘惑騙編譯器。如果你讀取的是unsigned char,而不是在你的代碼中輸入unsigned char。 –

回答

2

int Test2(char input2)可能無法正常工作。 最大unsigned char大於最大signed char(該範圍內的最大正整數)。

但是!

由於兩個unsigned charsigned char是相同的大小,無論你把它讀作signed charunsigned char什麼是存儲在存儲器中是一樣的。只有當你訪問它們時,解釋是不同的。

另外char var並不意味着它是signed char。它實際上取決於編譯器標誌。 Read here

0

最大可能值unsigned char值大於最大可能簽署的char值(因爲您實際需要標誌的一位信息)。

因此,第一個函數中的某些合法unsigned char值在傳遞給第二個函數時將不能表示爲帶符號的char。是否真的很重要,他們是否得到某種方式截斷,或轉向負面?他們顯然會以某種方式受到損害。

保持你的類型相同,除非你刻意強迫他們出於某種原因(例如,檢查你的unsigned char可表示爲一個char)。當然,您可能會有例外情況對您的內容有特別的瞭解。

1

它不會改變的價值,但它可以有不同的解釋,所以這真的取決於你想要的功能,裏面做,比如什麼:

unsigned char c = 255; 

void Test1(unsigned char c) 
{ 
    printf("%d\n", (c>100)); //prints 1 
    printf("%d\n", (unsigned char)c); //prints 255 
} 

void Test2(char c) 
{ 
    printf("%d\n", (c>100)); //prints 0 
    printf("%d\n", (unsigned char)c); //prints 255 
}