2017-02-10 9 views
1

関数がビットパターン00100010を返さなければならないとしましょう。unsigned charにはどのような値を割り当てることができますか?

右から5番目のビットでこのパターンを返したいとします。

これは有効ですか?

機能は00100010.

unsigned char mask = 20; 
return mask | settings; 

を表すか、unsigned charに値20を割り当てることができないパラメータ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

編集をした場合、それは問題ではないが:chuxに標準THXの説明を使用

+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; 

または単に:もしsettings二進値00100010(0x22)として、それは既に第5ビットが設定されていること

return 0x20 | settings; 

注意。

1

unsigned charにはどのような値を割り当てることができますか?

最小値はunsigned charとして0であるいくつかの符号なし整数タイプです。

最大値を<limits.h>が提供される:UCHAR_MAX

UCHAR_MAX少なくとも255であり、いくつかのパワーの2 - それは非常に一般的に255

1 255のような、511、65535、等場合この範囲外の整数値はunsigned charに割り当てられ、範囲内になるまでUCHAR_MAX + 1を加算/減算することで値が減少します。


次のコードはOKですが、20が必要なマスクであるか0x20であるかは不明です。バイナリパターン0010_0010 又は22 あること

unsigned char mask = 20; // bits 0001 0100 
// or 
unsigned char mask = 0x20;// bits 0010 0000 

注意。

関連する問題