讓我們假設一個函數需要返回位模式00100010.您可以將什麼值分配給無符號字符?
我想返回這個模式,從右邊的第5位開始。
這有效嗎?
該函數採用在其表示00100010.
unsigned char mask = 20;
return mask | settings;
或者是它不能分配值20
到unsigned char
參數settings
?
讓我們假設一個函數需要返回位模式00100010.您可以將什麼值分配給無符號字符?
我想返回這個模式,從右邊的第5位開始。
這有效嗎?
該函數採用在其表示00100010.
unsigned char mask = 20;
return mask | settings;
或者是它不能分配值20
到unsigned char
參數settings
?
我覺得rsp的答案有點混亂。所以讓我明白這一點。
像'a'
這樣的字符只是根據字符表的整數的解釋。例如,根據ascii表'a' == 97
,這種說法是正確的。
因此,您可以自由地將整數寫入(un)signed char
。 它基本上是一樣的。
如果使用printf("%c\n",var)
的int
參數轉換爲unsigned char
,並寫入產生的字符,它不會,如果你沒有var = 'a'
或var = 97
編輯關係:使用的標準THX到chux的說明
[ISO 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1)將是一個更好的例子。 ASCII僅用於某些有限的領域。 「 –
」var中的數字被重新解釋爲char「 - > C規範說」...將int參數轉換爲unsigned char,並寫入結果字符。 – chux
unsigned char
保證具有至少8位,所以表示二進制100000的值是類型的範圍內,但它應該在十六進制寫成:
unsigned char mask = 0x20;
return mask | settings;
或者乾脆:
return 0x20 | settings;
注意,如果settings
爲二進制值00100010(0x22
),它已經擁有了第5位設置。
您可以將什麼值分配給
unsigned char
?
的最小值是0作爲unsigned char
是一些無符號整數類型。
最大值被提供<limits.h>
:UCHAR_MAX
UCHAR_MAX
是至少255,是功率的2一些 - 像255 1,511,65535等,這是非常普遍255
如果將此範圍之外的整數值分配給unsigned char
,則通過在範圍內添加/減去UCHAR_MAX + 1
來減小該值。
下面的代碼是可以的,但不清楚如果20是所需的掩碼或十六進制0x20。
unsigned char mask = 20; // bits 0001 0100
// or
unsigned char mask = 0x20;// bits 0010 0000
注意,二進制模式0010_0010 是34 或22 。
'unsigned char'是'sizeof'等於1個字節的整數。如果我們假定1個字節是8位,那麼你可以給它賦值0-255。 – DeiDei
'unsigned char'保證至少有8位。因此該值在該類型的範圍內,但它應該用十六進制編寫:'unsigned char mask = 0x20;' – chqrlie
在C和其他一些語言中,不應讀取它存儲文本的字符「char」 。在其他人中,「char」必須是或應該是文本。 –