我正在C做一些不錯的工作,而且我正在閱讀unsigned char。我使用這些變量的每個函數是否需要將一個無符號字符作爲輸入,或者因爲我將該值加載爲無符號,它會自動保持第一位爲正數?如果一個變量被聲明爲無符號,那麼與它相關的函數也必須是?
從本質上講,我需要做的:
int Test1(unsigned char input1)
{
...
}
的一切,或將:
int Test2(char input2)
{
...
}
就夠了?謝謝。
我正在C做一些不錯的工作,而且我正在閱讀unsigned char。我使用這些變量的每個函數是否需要將一個無符號字符作爲輸入,或者因爲我將該值加載爲無符號,它會自動保持第一位爲正數?如果一個變量被聲明爲無符號,那麼與它相關的函數也必須是?
從本質上講,我需要做的:
int Test1(unsigned char input1)
{
...
}
的一切,或將:
int Test2(char input2)
{
...
}
就夠了?謝謝。
int Test2(char input2)
可能無法正常工作。 最大unsigned char
大於最大signed char
(該範圍內的最大正整數)。
但是!
由於兩個unsigned char
和signed char
是相同的大小,無論你把它讀作signed char
或unsigned char
什麼是存儲在存儲器中是一樣的。只有當你訪問它們時,解釋是不同的。
另外char var
並不意味着它是signed char
。它實際上取決於編譯器標誌。 Read here。
最大可能值unsigned char
值大於最大可能簽署的char
值(因爲您實際需要標誌的一位信息)。
因此,第一個函數中的某些合法unsigned char
值在傳遞給第二個函數時將不能表示爲帶符號的char
。是否真的很重要,他們是否得到某種方式截斷,或轉向負面?他們顯然會以某種方式受到損害。
保持你的類型相同,除非你刻意強迫他們出於某種原因(例如,檢查你的unsigned char
可表示爲一個char
)。當然,您可能會有例外情況對您的內容有特別的瞭解。
它不會改變的價值,但它可以有不同的解釋,所以這真的取決於你想要的功能,裏面做,比如什麼:
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
}
不要被誘惑騙編譯器。如果你讀取的是unsigned char,而不是在你的代碼中輸入unsigned char。 –