2017-02-10 58 views
1

讓我們假設一個函數需要返回位模式00100010.您可以將什麼值分配給無符號字符?

我想返回這個模式,從右邊的第5位開始。

這有效嗎?

該函數採用在其表示00100010.

unsigned char mask = 20; 
return mask | settings; 

或者是它不能分配值20unsigned char參數settings

+4

'unsigned char'是'sizeof'等於1個字節的整數。如果我們假定1個字節是8位,那麼你可以給它賦值0-255。 – DeiDei

+1

'unsigned char'保證至少有8位。因此該值在該類型的範圍內,但它應該用十六進制編寫:'unsigned char mask = 0x20;' – chqrlie

+0

在C和其他一些語言中,不應讀取它存儲文本的字符「char」 。在其他人中,「char」必須是或應該是文本。 –

回答

1

我覺得rsp的答案有點混亂。所以讓我明白這一點。

'a'這樣的字符只是根據字符表的整數的解釋。例如,根據ascii表'a' == 97,這種說法是正確的。

因此,您可以自由地將整數寫入(un)signed char。 它基本上是一樣的。

如果使用printf("%c\n",var)int參數轉換爲unsigned char,並寫入產生的字符,它不會,如果你沒有var = 'a'var = 97

編輯關係:使用的標準THX到chux的說明

+0

[ISO 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1)將是一個更好的例子。 ASCII僅用於某些有限的領域。 「 –

+0

」var中的數字被重新解釋爲char「 - > C規範說」...將int參數轉換爲unsigned char,並寫入結果字符。 – chux

0

unsigned char保證具有至少8位,所以表示二進制100000的值是類型的範圍內,但它應該在十六進制寫成:

unsigned char mask = 0x20; 
return mask | settings; 

或者乾脆:

return 0x20 | settings; 

注意,如果settings爲二進制值00100010(0x22),它已經擁有了第5位設置。

1

您可以將什麼值分配給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 。

相關問題