2009-04-16 12 views
4

私はk & rで繋がっていました。私は、ページ197上のライン以下の理解に問題を有する(セクションA6)より小さい整数からCでのより小さい符号なしタイプの変換

積分変換した:任意の整数がその 整数と合同である最小の非負 値を求める によって与えられた符号なしの型に 変換されます。 より大きい1を法とし、 を符号なしタイプで表すことができます。

どのようなボディでもこれを少し詳しく説明できますか? ありがとう

答えて

6

任意の整数であります指定された符号なしの型に変換されるその整数に合致する最小の負でない値を見つけることによって、符号なしの型で表現できる最大の値よりも1を法とします。

のは、ビットでかつ後方からこのビットを見てみましょう:

幅のnビットの符号なしの型で表現できる最大値は何ですか?

2^(n) - 1. 

この値より1つ多くは何ですか?

2^n. 

どのように変換が行われていますか?

unsigned_val = signed_val % 2^n 

、なぜ一部:標準の表現が使用されているものをビット強制しません。したがって専門用語。最も一般的に使用されている2の補数表現では、この変換はビットパターンを変更しません(もちろん切り捨てがない限り)。

詳細については、「標準からの積分変換」を参照してください。

6

これは、低い値のビットだけがカウントされ、上位のビットが破棄されることを意味します。例えば

01111111 11111111 11110000 00001111 

16ビットunsigned shortに変換されます。

11110000 00001111 

これを効果的に数学的に表現される:

target_value = value % (target_type_max+1)   (% = modulus operator) 
関連する問題