2007年1月13日土曜日

unsinedの減算

C言語にて嵌ってしまったこと。

unsigned int a = 3;
unsigned int b = 1;
unsigned int c = 0;

c = a - b;

てなソースを書いてしまい…
c の値が意味不明な数値に!

原因は、unsigned なのに減算を行ってしまっていた事でした。
signed の場合は最上位1ビットが符号をあらわしている。
そのため、マイナス符号をつけた b は b 値の"2の補数"となる。
その結果、 a - b の期待結果としては 2 という値が欲しいが、
-b 値は 1 の2の補数となっているため
a - b の値は(4294967293)となってしまいました。

unsigned の減算には気をつけましょう。
.

0 件のコメント:

ラベル