2017-02-16 15 views
1

私の教科書には、すべての整数が既定で署名されていると言われています。私がオンラインで見つけたほとんどのソースには、浮動小数点数に署名する必要があると言われていますから、signedキーワードを使用するポイントは何ですか?なぜCで署名された整数を指定しますか?

+3

'char'変数に使うことができますが、これは[既定では符号付きまたは符号なしに指定されていません](http://stackoverflow.com/questions/2054939/is-char-signed-or-unsignedデフォルトで)。 –

答えて

6

Cでは、あなたは型名の一部を省略することができますので、あなたが実際にうまく左右対称に見えるかもしれない、代わりにintsignedを使用することができます。より冗長

void f(signed a, unsigned b); 

または:

unsigned int foo; 
signed int bar; 

両方のタイプをごく近傍で使用しない場合は、より単純な形式の名前を使用することをお勧めします。

int x; // normal 
auto y; // quaint 
signed auto graph; // why not 
2

キーワードunsignedが必要な状況が少なくとも2つあります。

最初は、タイプ指定子charのキーワードは、signed charまたはunsigned charのいずれかとして動作できるため、キーワードを使用しています。つまり、char,signed charunsigned charという3つの異なるタイプがあります。

タイプ指定子がintのビットフィールドがsigned intまたはunsigned intのいずれかとして動作できるため、2番目のフィールドはキーワードをビットフィールドに使用しています。

+0

C11のような音は普通のint型のように、ビットフィールド(6.7.2.1/5)の型として移植可能ではありません。 –

+0

@KerrekSB "ビットフィールドの場合、特定のintがsigned intと同じ型またはunsigned intと同じ型を指定するかどうかが定義されています"と書かれています。 –

+0

私はそれを今、感謝を見る! –

0

signed言葉はあまり使われていません。 unsignedはすべての整数型(char型がチェックされています) が署名済みとして自己定義されているためです。また、unsigned float,unsigned doubleまたは unsigned long doubleは存在しません。 //signed float/double/long double are errors to.

+0

'long double'が有効です。 – alk

+0

はい、' signed long double'と 'unsigned long double'はありません –

関連する問題