所以最近,我讀了一個關於C,char/unsigned char/signed char中三種不同類型的問題。我現在遇到的問題並不是我迄今爲止所經歷過的(我的程序在所有測試過的計算機上都能正常工作,並且只針對小端(基本上所有使用Windows/Linux的現代臺式機和服務器都適用?)。我經常重複使用char我爲定義一個「字符串」(當然不是一個真正的字符串)作爲臨時變量定義的數組,例如,不是將另一個字符添加到堆棧中,而是重用像array [0]這樣的成員之一。事實上,一個char總是簽署,直到今天我讀它實際上取決於實現。如果我現在有一個char和我分配一個負值,會發生什麼?C cast和char signedity
char unknownsignedness = -1;
如果我寫的
unsigned char A = -1;
我認爲C風格的演員將簡單地重新解釋位和A表示爲無符號類型的值變得不同。我認爲這些C型表演只是對位的重新解釋嗎?我現在指的是簽署< - >無符號轉換。
所以如果一個實現有char作爲無符號,我的程序會按預期停止工作嗎?就拿最後一個變量,如果我現在做
if (A == -1)
我現在比較一個無符號字符到符號的字符值,所以會這樣簡單地比較不關心是否帶符號位還是將返回false,因爲顯然不能是-1?我很困惑在這種情況下會發生什麼。這也是我最關心的問題,因爲我經常使用這樣的字符。
什麼鑄造?沒有任何地方鑄造。如果要存儲二進制(非字符)數據,請使用更好的(IMO)'int8_t'或'uint8_t'標準類型。 –
我的實現不支持C99,我認爲int8_t是該版本 – user209347
如果我將一個有符號的值賦給一個無符號的值,會不會有轉換?或者只有在數據大小不匹配的情況下才會投射? – user209347