質問: minus3 + 1u; として出力したところ ddt1は-2.0 ddt2は4294967294.0 となりました。 ddt1の結果はわかるのですが、ddt2はなぜ 4294967294.0 になるのでしょうか? 1uの効果でunsinged型にあわせて計算しているのでしょうか? もしそうだとしたら minus3 が 4294967293 になると思うのですが、なぜminus3 が 4294967293 になるのでしょうか? 説明が不足ならまたつけたしますのでどうか教えてください。
回答: 169という数値を例とします。 169 =100+60+9 =1*100+6*10+9*1 =1*(10の2乗)+6*(10の1乗)+9*(10の0乗) となります。 各々の「a*(bのc乗)」に着目します。 a:もとの数値の各桁の数字 b:10で固定(だから10進数といいます) c:いちばん右から0、1、2と増えていく ここで、0169という表記のことを考えます。途中を省略すると、 0169 =0*(10の3乗)+1*(10の2乗)+6*(10の1乗)+9*(10の0乗) となります。 最初の項である「0*(10の3乗)」は、「0に何を掛けても0」という原則から0です。 その結果、 1*(10の2乗)+6*(10の1乗)+9*(10の0乗) =0*(10の3乗)+1*(10の2乗)+6*(10の1乗)+9*(10の0乗) となり、169=0169となります。 同様に、00169も、000169も、0・・・0169も、すべて「百六十九」です。 話を元に戻します。 2進数の 010101010 と 10101010 が同じかどうか、という話でした。 答えは、もうおわかりですね。