両方のforのループカウンタでiを使ってるけどこれは意図してこう書いてるの?
Visual C++を入手するには
Visual Studioを購入しなければならないのですか?
コマンドライン版だけ欲しいってことならPlatformSDKでも落としとけ
>>953 VisualC++2005ExpressEditionは無料でダウンロードできるよ
>950
>for (i = int_bits() -n -1;i>=0;i--)
>temp *= 2;
>n++;
iじゃなくて別の変数にすべきだし>=じゃなくて>だろってのはおいといても、temp << i で十分だろ
そのメール欄からして
>>891か
答え書いてあるのに読めないのか?
別人だとしてこのスレぐらい全部読めよ
っていうか入門書だとかに大抵無料のコンパイラついてくるんだからそれ使えよ
>892 大変失礼しました。わたしの質問891が1時間ほど待っても表示され
なかったのでgive upしてしまったのです。よく分かりました。
ありがとうございました。
>>956 unsigned print_bits(unsigned x,unsigned y)
{
int i;
int temp;
unsigned sum = 0;
for (i = int_bits() - 1;i>=0;i--) {
if ((y>>i) & 1U)
temp = 1;
else
temp = 0;
temp << i
sum += x * temp;
}
return (sum);
}
変更したのですが、コンパイルすると、コードは効果を持たない(関数 print_bits )とでてしまいました。
どうしてでしょうか?
int_bits()がどこから出てきたのか我々には分かりません。
>>960 >>949にあるんだけどね。
流れを追えないだけじゃなく、見当違いだから黙ってていいよ。
>>959 sum += x * (temp << i)でいいということだろ。
>>961 temp << i
sum += x * temp;
でも問題ないだろ
セミコロンが無いのはともかく
いやそれは問題あるだろ
temp <<= i; としたいのか?
なんだってこのスレはこんなに頭の弱い子ばかりなんだろう……
入門篇だからだよ
すいません、わかりました。
temp = temp<<i;
でいけました。ご迷惑おかけしました
何だこのバカさ加減は。
その他人を見下す性格、あらためた方がいいと思うよ
何百回も繰り返しcallされる関数が有るのですが、最初にcallされ
た場合に限り、特別な処理がしたいと思っています。staticなフラ
グを宣言すれば出来るには出来るのですが、何百回もcallされるの
に、最初の一回の為にフラグをチェックするのはちょっとバカバカ
しい。何か良い方法は無いでしょうか?
>>969 「最初にcallされた場合」フラグを関数内に持たず、関数外から引き数で与えては?
高々数百回程度じゃ歯糞にもならないけどね。
関数ポインタで
func = first_func;
...
func = second_func;
とかやればいいんだけど普通の関数コールに比べてオーバーヘッドが発生するんで
フラグのチェックよりマシとは言いがたい。
>最初の一回の為にフラグをチェックする
のではなく、
2回目以降全ての為に(1回目も)フラグをチェックする
と考えてはどうだろう。
いや、どうでもいいけどね。
>>972 オーバーヘッドについて詳しく。
私の知る限り、イミディエイト関数呼び出しとレジスタ間接関数呼び出しで
大きく処理時間が異なるCPUはないのだけれど。
#寧ろ、某CPUはレジスタ間接の方が速いし。
>>974 昔のパソコンは結構効いてたけど、最近のはあんまり関係ない気がする。
レジスタに関数のアドレスをセットするのがオーバーヘッドになるって事でしょ
>>976 それもまた、今のCPUなら殆ど無視できる。
計測は力なり
Efficeon搭載機を使う、とか…
多少汚くても高速なCPUが力押しで処理してくれるのはいいんだが
初心者の小規模なプログラムだと「こっちのほうが高速だぜ」って言われても実感できない…
知らぬ間にメモリ参照のコスト0の新技術が開発されたのかと思ったぜ
関数呼び出しそのもののオーバーヘッドに対して、充分無視できるって話なだ。
いや、static なフラグのチェック処理と比べるべきじゃないか。
このフラグのチェックも、
キャッシュと分岐予測が効けば大したことなさそうではある。
まあ、コスト 0 ではないだろうが。
だからそもそも、高々数百回ごときで時間云々する意味がないっしょ。
staticにする場合はマルチスレッドの場合に問題がないか確認する必要はあるね。
985 :
デフォルトの名無しさん:2007/07/24(火) 19:30:58
This is a pen.
を取得するプログラムを書きたいのです。
で
char str[1024];
while(1){
scanf("%s", str)
func(str);//funcと言う関数に"This is a pen."を一度に入れたい。
}
こういったプログラムを書いてThis is a pen.と入力すると、何故か
1周目のループで、Thisが入り、2週目でis・・・5週目で.が入ってしまいます。
こういう問題はどのようにすれば解決するのでしょうか?
>>985 scanf("%1023[^\n]", str)
素直にfgets(str, sizeof(str), stdin)を使うべきだとは思うが。
>>985 scanfは空白で入力が区切られるようになっている。
989 :
デフォルトの名無しさん:2007/07/24(火) 22:39:57
1Gは1000.000バイトらしいのですが、どうやって求めるのでしょうか?
どうやれば、ギガをバイトにするのでしょか?
これはひどい
>>989 単位なんだから、もとめるもなにもないだろう。
K -> M -> G で、1000倍していけばいいよ。
1024
>>992 HDDメーカじゃないかな
あの業界だけ1000単位
テラワロスとかって書き込みみても、どのくらいワロスのかピンとこないかわいそうな子。
Kなら1024だけどkなら1000
容量なら1024だけどスループットなら1000
997 :
デフォルトの名無しさん:2007/07/24(火) 22:57:41
サンクスです
>>992 解説の例題問題にありました。
998 :
989:2007/07/24(火) 23:04:10
>>991 となると、1000.000.000 ではないのでしょうか?
1000 :
デフォルトの名無しさん:2007/07/24(火) 23:09:42
1000なら1K
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。