07/03/26 18:52:17
>>816
整数オーバーフローが発生した場合の動作は未定義
そもそもUINT_MAX==2^(sizeof unsigned)-1である保証もない
819:816
07/03/26 18:58:34
>>818
分かりました
別の方法を考えてみることにします・・・
レスありがとうございました!
820:デフォルトの名無しさん
07/03/26 19:31:05
>>818
あれ、そうだっけ。
intとかの負数を含む型は、
オーバーフローは未定義だったのは規格で書いてあった覚えあるけど。
unsignedも未定義って書いてたっけ?
確か2^Nで余剰を取った結果になるって書いてたと思うけど。
821:デフォルトの名無しさん
07/03/26 21:09:16
>>816
規格では、符号なし整数の演算結果が範囲外になったときは範囲内に収まるまで
(その型の最大値+1) を足したり引いたりした値になるとされている。 ISO C 6.3.1.3
これにより ((unsigned int)-1) は常に UINT_MAX に等しいと言える。
822:デフォルトの名無しさん
07/03/26 21:19:31
UINT_MAX は-1よりも~0の方が好きだな
単なる好みの問題だけど
823:デフォルトの名無しさん
07/03/26 21:21:05
オーバーフローはバグの原因になるから理解するのはいいけど、
実際にプログラムに組み込むなよw
824:デフォルトの名無しさん
07/03/26 21:44:31
>>822
それって保証されてるん?
825:デフォルトの名無しさん
07/03/26 22:00:58
C90/C99ともにただ 0 とだけ書いた場合は (int)0 と等価なので
それを全ビット反転するわけだから -1 になると思うが
826:デフォルトの名無しさん
07/03/26 22:01:46
書き漏らした
int範囲で -1 になると思う
827:デフォルトの名無しさん
07/03/26 22:02:27
負数の表現方法は C の規格外。
828:デフォルトの名無しさん
07/03/26 22:03:45
~0Uだな
829:デフォルトの名無しさん
07/03/26 22:12:28
つまり、-1 が 0x80000001 な環境でも
(unsigned)-1 は 0xFFFFFFFF (が UINT_MAX とする)になるということか。
830:デフォルトの名無しさん
07/03/26 22:15:01
まぁそういうことだよな?
ただの -1 なら 0x80000001 で解釈されるけど
(unsigned)キャスト時はコンパイルでUINT_MAXに置換されるってことなんだろうか
831:デフォルトの名無しさん
07/03/26 23:28:52
VC++ 2005を始めました。
Byte単位でのファイル入出力はできますか?
ビギナー本には書いてないし、ネットでも色々探したのですが…。
エロい人、方法を教えてくだされ。
832:デフォルトの名無しさん
07/03/26 23:34:42
fread() fwrite()
833:デフォルトの名無しさん
07/03/26 23:36:00
fstream