Visual Studio 2017 を使用することをお勧めします

符号なし整数型からの変換

 

公開日: 2016年4月

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

符号なし整数は、上位ビットを切り捨てることによって短い符号なしまたは符号付き整数に、また、ゼロ拡張によって長い符号なしまたは符号付き整数に、変換されます (「符号なし整数型からの変換」表を参照してください)。

整数型の値がサイズの小さい符号付き整数に下位変換されるか、符号なし整数が対応する符号付き整数に変換される場合、新しい型で表すことができるときには、値は変更されません。 ただし、次の例のように、符号ビットが設定される場合は、表される値が変更されます。

int j;  
unsigned short k = 65533;  
  
j = k;  
printf_s( "%hd\n", j );   // Prints -3  

値を表すことができない場合、結果は実装定義になります。 Microsoft C コンパイラの整数の下位変換処理については、「Type-Cast Conversions (型キャスト変換)」を参照してください。 整数変換や整数の型キャストによっても、同じ動作が発生します。

符号なしの値は、値を維持するように変換されます。この変換を直接 C で表すことはできません。 唯一の例外は unsigned long から float への変換で、最も多い場合、下位ビットが失われます。 それ以外の場合は、符号付きでも符号なしでも、値は維持されます。 整数型の値を浮動小数点型に変換するときに、値が表せる範囲を超えている場合の結果は、未定義になります。 整数型と浮動小数点型の範囲については、「基本型のストレージ」を参照してください。

次の表は、符号なし整数型からの変換をまとめたものです。

Conversions from Unsigned Integral Types (符号なし整数型からの変換)

変換前変換後方法
unsigned charcharビット パターンを維持、上位ビットが符号ビットになる。
unsigned charshortゼロ拡張。
unsigned charlongゼロ拡張。
unsigned charunsigned shortゼロ拡張。
unsigned charunsigned longゼロ拡張。
unsigned charfloatlong への変換、long から float への変換。
unsigned chardoublelong への変換、long から double への変換。
unsigned charlong doublelong への変換、long から double への変換。
unsigned shortchar下位バイトを維持。
unsigned shortshortビット パターンを維持、上位ビットが符号ビットになる。
unsigned shortlongゼロ拡張。
unsigned shortunsigned char下位バイトを維持。
unsigned shortunsigned longゼロ拡張。
unsigned shortfloatlong への変換、long から float への変換。
unsigned shortdoublelong への変換、long から double への変換。
unsigned shortlong doublelong への変換、long から double への変換。
unsigned longchar下位バイトを維持。
unsigned longshort下位ワードを維持。
unsigned longlongビット パターンを維持、上位ビットが符号ビットになる。
unsigned longunsigned char下位バイトを維持。
unsigned longunsigned short下位ワードを維持。
unsigned longfloatlong への変換、long から float への変換。
unsigned longdoubledouble への直接変換。
unsigned longlong doublelong への変換、long から double への変換。

Microsoft 固有の仕様 →

Microsoft の 32 ビット C コンパイラでは、unsigned int 型は unsigned long 型と等価です。 unsigned int 値の変換は、unsigned long の変換と同様に実行されます。 unsigned long 値から float への変換は、変換されている値が正の符号付き long の最大値より大きい場合は、正確ではありません。

END Microsoft 固有の仕様

代入変換

表示: