こんにちは,くぬぎざです. On Mon, 25 Feb 2002 12:28:29 +0900 Katsushi MATSUBAYASHI <matsu@xxxxxxxxxxxxxx> wrote: > これは,ANCIの仕様でしょうか。 仕様と言えば,仕様です. 仕様では,単項の - 演算子は,代入の = 演算子よりも優先順位が 高いとされているため,y=-x; という式は,1) x の符号が反転し, 2) 1 の結果が y に代入されるという順序で評価されます. すなわち,1) の段階で unsigned int として宣言されている x が 無理やり負数にされてしまっているため,当然の帰結としておかしな 結果となるわけです. y=-x; という演算を意図した通りにやるには,x を unsigned では ない int として宣言するか,式において y=-(int)x; というふうに int のキャストを付け,= の右辺を,負数をも扱いうる実数型として 処理されるようにしておく必要があります. /* キャストを付けた例 */ #include <stdio.h> main() { unsigned x=10; double y; int z; y=-(int)x; z=-x; printf("%lf\n",y); printf("%d",z); } ちなみに,4294967286 という数字の秘密は・・ 1) 0x0A の符号を反転 -> 32bit なら 0xFFFFFFF6 になる 2) 正数としての 0xFFFFFFF6 は,10進で表記すると 4294967286 である 椚座 淳介 (Junsuke Kunugiza) E-Mail: jk@xxxxxxx