>>950-951 サンクスです!疑問が解けました!
本で読んだ限り、今のところデータ型が変化するのは「キャスト演算子」ってヤツの項で
出ただけだったので、これで変化するとは思いませんでした。
もしかするとあとで出てくるのかもですね。
胸のつっかえが取れたんで、先に進むことにします。
ありがとうございました。
これで0.01をかけるという馬鹿なことをやる奴が増えるのかorz
理由も述べずにそんなことをいう
>>957 も十分馬鹿だけどな
>>944 は解答を踏まえた上で、参考として聞いたんだと思うのだが。
>>957 よ、宜しければ参考までに馬鹿じゃない場合のご高説を賜りたいものです。
符号無し整数を加算するとき桁あふれを検出するには、 計算前の値を保存して毎回チェックするしかないんでしょうか? result = a + b + c; だと桁あふれする可能性があるので unsigned int RobustPlus(unsigned int a, unsigned int b) { unsigned int tmp; tmp = a; a += b; if (tmp < a) { return UINT_MAX; } return a; } result = RobustPlus(RobustPlus(a, b), c); if (result == UINT_MAX) { error(); } としてみたものの、どうも格好悪くて釈然としません。
961 :
デフォルトの名無しさん :05/01/30 23:51:39
アセンブラだと簡単なのにね
ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい
>>957 「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
965 :
デフォルトの名無しさん :05/01/31 00:26:34
>>960 最上位ビットが両方とも0なら決して桁あふれしない。
最上位ビットが両方とも1なら必ず桁あふれする。
最上位ビットの排他的論理和が1ならRobustPlus()を使う。
でどう?
>>965 そんなにビット演算をしつつも何度も比較が入る可能性があるならば、
素直に比較一回で済ませた方が得をすると思ふ。
967 :
965 :05/01/31 01:10:03
>>966 >素直に比較一回で済ませた方が得をすると思ふ。
わてもそう思ふ。
無理矢理こさえてみましたという感じ。
うーん、もっと格好悪いな、こりゃ。 unsigned int RobustPlus2(unsigned int a, unsigned int b) { if (a ^ b) { return RobustPlus(a, b); } if (a & b >> 32) { return UINT_MAX; } return a + b; } 下位ビットまで再帰的にやればもっと格好悪くなりそう。
しまった32じゃなくて31だ。それにしても移植性わるー。
970 :
デフォルトの名無しさん :05/01/31 01:46:03
Cで使えるコンテナライブラリってないですか?
971 :
デフォルトの名無しさん :05/01/31 01:47:46
突然ですが、失礼します。 char s1[10] = "test"; char s2[10]; char s3[10] = "test\n"; i=0; while(s3[i]!='\n'){ s2[i++]=s3[i++] } s2[i]='\0'; このとき、 strcmp(s2,s1)==1 は成り立ちますよね?
成り立ちません
> s2[i++]=s3[i++] 未定義。 > strcmp(s2,s1)==1 そんな危険な判断をするな。
975 :
デフォルトの名無しさん :05/01/31 01:58:25
あ、すみません。記述ミスです。 strcmp(s2,s1)==0 の間違いです。
s2[i++]=s3[i];
つうかどこに論点を置いてるのかサパーリ分からん
もしかして成り立つまでデバッグしてくれという依頼なのか?
981 :
デフォルトの名無しさん :05/01/31 02:08:06
すいませんでした。 論点が言いにくい問題でして、 ようはテキストファイルをバッファに取り込んで、 そのバッファから一文字ずつ読み込んで、改行がきたら、\0を入れて、 その取り込んだ一行の文字列と任意の文字列を比較して、 同じだったら処理といった形にしたいのですが、うまくいかなかったもので、 コンパイルはうまくいくのですが、実際に実行すると、途中表記ではしっかり取り込まれているのですが、 printf("%s",s2); でtestみたいに表示されているのですが、なぜか、0の値が返ってこないんです。 それで、根本的なことがちがっているのかと思いまして・・。駄文長文すみません。
i=0; while(s3[i]!='\n'){ s2[i]=s3[i]; i++; } s2[i]='\0';
while(s3[i]!='\n'){ s2[i++]=s3[i++] } ↑は、 for(i=0; s3[i] != '\n'; i++) s2[i] = s3[i]; ↑これ?
984 :
デフォルトの名無しさん :05/01/31 02:14:34
m_pBufferLine[0] = '\0'; //ヌル文字を設定 int i=0; do m_pBufferLine[i++] = DxfData[m_BufferIndex++];//1行バッファに一文字読み込む while(DxfData[m_BufferIndex-1] != '\n' && i < MAX_LINE_DXF && m_BufferIndex < FileLength); m_pBufferLine[i-1] = '\0'; 記述としては上記がそのまんまです。
986 :
デフォルトの名無しさん :05/01/31 02:18:28
分かりにくくて、すみません・・・。 出直してきます。orz
1行ずつ読んで特定の行が来たら処理をしたい、ってだけじゃないの? なんでそんな難しい表現になるんだ?
988 :
SE候補@大学生 :05/01/31 06:30:37
大学1年
琉球大1年レベル
前半にいたっては高校生
>>988 学期末に出題されるんなら丁度いいんじゃねーの? 線形代数も習ってるだろうから
なおさらやりやすいでしょ。
キャストって時間かかるんですか? 処理系は32bit Intel系のPCです。
996 :
デフォルトの名無しさん :05/01/31 09:17:43
記念カキコ v(^-^=)
1000とるから
998
999
1000 :
デフォルトの名無しさん :05/01/31 09:23:25
1000だーーーーーーーーーーー! やったーーー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。