[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/05 19:06 / Filesize : 223 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 95



1 名前:デフォルトの名無しさん [2012/01/13(金) 22:05:06.14 ]
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 94
toro.2ch.net/test/read.cgi/tech/1324648274/
★過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 155代目
toro.2ch.net/test/read.cgi/tech/1325685876/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
codepad.org/

237 名前:デフォルトの名無しさん [2012/01/16(月) 01:10:56.78 ]
高速フーリエ変換使って1万桁同士の掛け算を行うプログラムを作れ。
そういう課題が出た。さっさと教えろ。お前ら偉いだろ。

238 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 01:18:08.73 ]
宿題は宿題スレに逝けと言ってるだろ、このタコ。

239 名前: ◆QZaw55cn4c mailto:sage [2012/01/16(月) 03:23:46.56 ]
>>65
こんなのでどうですか?
ideone.com/SGJmx

240 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 08:25:12.57 ]
>>237
作ってやるから20万円よこせ
偉い人の時間は高いぞ

241 名前:デフォルトの名無しさん [2012/01/16(月) 14:33:54.35 ]


ステルスマーケティングまとめ
A www.dotup.org/uploda/www.dotup.org2522270.png
B www.dotup.org/uploda/www.dotup.org2522750.png
 →  ステマの黒幕は ソニー(アニプレックス)、角川

関連キーワード はちま 清水鉄平(はちまの本名) KND 元ソニー会長出井伸之
        はちま管理人によるみかじめ料を払わない特定メーカーへの叩き
        まとめサイトは企業が運営 コメント欄も社員の煽り(が殆ど)
おまけ
2ch監視が仕事のスクウェア社員w↓
96 名前:番組の途中ですがアフィサイトへの転載は禁止です[sage] 投稿日:2012/01/16(月) 12:41:25.60 ID:X9dFbc830
proxy1.square-enix.co.jp - 2012/01/16 12:38:51 - Japan - Commercial(企業)
IP :61.195.58.8 (不明)
Referer :ipatukouta.altervista.org/php5/
USER-AGENT :Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)


【株式会社KND・清水鉄平】はちま起稿が特定され黒い関係が明らかに★78【黒幕を特定せよ】
awabi.2ch.net/test/read.cgi/poverty/1326691256/

242 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 22:36:48.88 ]
リスト構造も使い易さを追求して、様々な形態の物が存在する。
使い易さを追求して実現された種々の機能と それを実現しているリスト構造の具体例について
解説せよ。
という問題があるんだが、答えるのにチェイン法とか機能の説明でいいのかな?

243 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:20:46.73 ]
>>238

244 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:24:32.44 ]
>>242
いいと思う。

245 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:27:06.26 ]
>>244
ありがとう

ついでなんだが、オブジェクトのデータと処理とを組み合わせて
合理的に管理するためのプログラミング手法ってなんて言うんだったっけ?



246 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:27:21.98 ]
>>244
ありがとう

ついでなんだが、オブジェクトのデータと処理とを組み合わせて
合理的に管理するためのプログラミング手法ってなんて言うんだったっけ?

247 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:29:04.14 ]
oops!

248 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:34:49.93 ]
oh...
連レスすまない

249 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:50:08.16 ]
>>246
OOP, Object Oriented Programming

250 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:58:46.59 ]
Object oriented programming style

アクネドート:
実用に成るコードを完成させるためには
定義の段階で同じ識別詞、同じ記述が繰り返し繰り返し現れる

251 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:34:19.57 ]
関数プロトタイプ宣言について、どのような時に用いるか、なぜ必要なのか教えていただけないでしょうか。
よろしくお願いします。

252 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 01:34:11.86 ]
>>251
その関数を呼び出す前に、その関数を使用する場合
プロトタイプ宣言しといて、実装を後に実装する。
あと、ライブラリを作成するとき、ヘッダに宣言をまとめて
書いといて、実装をコード側に書く。

253 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 10:04:03.55 ]
>>246
「データ」が「ステート(状態)」の事を意図してるなら、OOP。
「データ」一般なら色々あるからCTMCPなどが参考になる。

254 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 12:29:37.79 ]
以下のように
aが32未満のときは、AしてからCして、Dする
aが224より大きいときは、BしてからCして、Dする
それ以外のときはAもBもCもせずにDする
というような制御構造を、ソースレベルでも、出力されるアセンブラレベルでも
重複コードがないようにするには、gotoを使うしかないのでしょうか?

if(a < 32){
b = a; //A
}else if(a > 224){
b = 256 - a; //B
}else{
goto HOGE2;
}
HOGE1:
c = b * 100; //C
HOGE2:
//D

255 名前:254 mailto:sage [2012/01/17(火) 12:30:35.88 ]
d = a < 32;
e = a > 224;
if(d || e){
if(d){
b = a; //A
}else{
b = 256 - a; //B
}
c = b * 100; //C
}
//D

こういうのもifが2つあって、なんだか冗長です。



256 名前:254 mailto:sage [2012/01/17(火) 12:30:55.20 ]
void hoge(int *pc, int b){
*pc = b * 100; //C
}
---
if(a < 32){
b = a; //A
hoge(&c, b);
}else if(a >> 224){
b = 256 - a; //B
hoge(&c, b);
}
//D

これも関数呼び出しコードが重複してるし
関数呼び出しコストがもったいないです。
inlineにすれば、呼び出しコストはかからないけど
//Cの部分がアセンブラレベルで重複してしまいます。

結局gotoを使わないと、重複は避けられないのでしょうか?

257 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 13:26:36.03 ]

if( a < 32 ){
 //A
}
if ( a > 224 ){
 //B
}
if( ( a < 32 || a > 224)){
 //C

//D


>>254は、コードが複雑になった場合に追っかけるのが面倒
>>255は、何やってるのかわかりづらい
>>256は、今時のシステムならそのくらいのコスト気にすんな。関数名次第では分かりにくい。

自分は、同じ基準で判定する方がコードが分かりやすい。
このケースの場合、a を基準にするのではなく、
//A、//B、//C、//Dのそれぞれのコードがどういう条件なら実行できるか、
を同じレベルで書いた方が後で見て分かりやすい。



258 名前:254 mailto:sage [2012/01/17(火) 14:59:48.07 ]
なるほど、>>255でネストするよりわかりやすいです。

多少冗長になっても、メンテを考えればgotoなど使わない方がいいと言うことですね。

ありがとうございます。

259 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 15:13:29.39 ]
//Cの条件はb>=32か?


260 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:08:24.42 ]
goto使わなくても大抵コンパイラ後はgoto相当の処理してるんだがな。

261 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:14:30.48 ]
goto使ってもいいと思うんだけどな。

262 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:30:33.18 ]
あれならこうかな。

  bool a32 = (a < 32)
  bool a224 = (a > 224)

  if (a32 || a224) {
    if (a32) {
      A();
    } else {
      B();
    }
    C();
  }
  D();


263 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:38:28.45 ]
>if (a32 || a224) {
if (a32 | a224) {
の方がいい場合あり。
昔逆アセンブルしてみたら
if(a32) goto xxx;
if(a224) {
xxx:
...
}
的な処理してた。

まぁ処理速度必要で、
一秒間に数千、数万回実行される処理でなきゃそこまでする必要は無いと思う。

264 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:40:24.40 ]
組み込みとか4kデモとかじゃないかぎり気にせず関数化

265 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:40:35.91 ]
って、>>262>>255と同じだったか。
>>263
そこまで速度を必要とするならそもそも条件判断をしないようにすればいい。



266 名前:254 mailto:sage [2012/01/17(火) 16:50:41.22 ]
4kではないですが、動画の処理なので、関数呼び出しコストはかなり気になります。

条件判断しないようにすればいいとは、どのように書けばよいのですか?

267 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:51:40.47 ]
>>263
||を|とかかれると?と思ってしまう。
あー、これはほかにもいろいろバグが入ってるんだろうなー、と残念な
気持ちになるんで人が見るコードの場合はやめてくれ。

268 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:52:58.71 ]
>>266
一番簡単なのは必要な処理を用意して関数ポインタ使って条件によって切り替える。
一般的に高速化と冗長性の削減は両立しないんだよ。

269 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:53:19.03 ]
まぁ、それ以前にOpenVCなり使えるものを使うのがいいと思うけどな。

270 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:53:41.91 ]
OpenCVな。

271 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:55:25.05 ]
昔アセンブラで計算処理部分で分岐無くすように書いたことあったな。
フラグ取得→ローテーション命令で0か0ffffhに加工→計算過程でANDして加算
速くなったかどうかは知らん。

272 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:55:39.99 ]
あぁ、ピクセル処理みたいのならテーブル引きにすればいいよ。

273 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:57:15.88 ]
高速化が必要だと思った場合はまずプロファイルを取るのが基本。
1%の処理を100万倍速くしたところで1%も速度は向上しない。

274 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:58:51.38 ]
>人が見るコードの場合はやめてくれ。
0=偽 0以外=真 って確証(確信?)ないからやらないよ。

275 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:00:19.16 ]
いやいや、それは仕様で決まってるから。
どういうこと?



276 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:02:44.89 ]
仕様書見たこと無いってこと。


277 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:06:38.13 ]
まぁこのスレの99%はそうだろうからそれは気にしない。

278 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:07:49.12 ]
>>255
関数のサイズと関数の呼び出しコストって関係あるの?

279 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:09:48.50 ]
各ABCの処理が、簡略化されたからそうなっているのか、実際にそうなのかにもよりそうな話だなぁとおもったり。

280 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:12:29.87 ]
>>278
ない。

281 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:13:23.01 ]
もちろん、厳密にはキャッシュの利用が変わってきて速度は変わる。
が、そんなことを気にするのはあと数レベル先の話。

282 名前:デフォルトの名無しさん [2012/01/17(火) 18:10:35.59 ]
C言語のテトリスを標準出力で作るのって無理ですか?

283 名前:デフォルトの名無しさん [2012/01/17(火) 18:14:32.35 ]
日本語変だな。

テトリスをC言語によって作るのは出来ると思うのですが
標準出力のみで作れますか?

284 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:17:54.16 ]
できるよ。

285 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:17:59.44 ]
OSや端末を絞れば作れるでしょうしCUIのテトリスはぐぐれば出てくるでしょう



286 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:18:39.20 ]
標準のみだと改行しないといけないけど、それ我慢すればできない理由はないね。

287 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:20:30.52 ]
Curses使えば普通に楽しめそう。

288 名前:デフォルトの名無しさん [2012/01/17(火) 18:23:18.51 ]
>>286
グラフィック関連の低級性ってどうなってんの?
プログラミングだとアセンブラでしょう。
グラフィックは?

289 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:24:24.40 ]
何言ってるのか分からん

290 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:31:30.36 ]
ニコ動に1時間でWindows版テトリス作るみたいなのがあったからそれでも
見てみたらどうか。

291 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:32:00.50 ]
>>288
16ビットのときは、CPUで特定のアドレスに書きこむと画面に反映されてた。
それ以降は知らん。

292 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:40:41.05 ]
昔昼休みにUNIXでテトリス対戦してる人がいた。
見た感じCUIだった。

293 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 19:05:11.88 ]
>>291
Windows には専用の API がある。


294 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 19:23:05.12 ]
標準出力って事は、コンソール出力なんだろうから、
エスケープシーケンス使うかすればいいのかな?

295 名前:デフォルトの名無しさん [2012/01/17(火) 19:47:18.39 ]
>>290
見たww

>>291
なるほどぉ。

いやもっと低級な事。
インクとかは?どうやって全色出してるのかなと。



296 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 19:48:22.99 ]
すまんが、そのインクとかいうものとC言語の関係を教えてくれないか?

297 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 19:57:22.70 ]
>>295
環境に依存すると思う。どういう環境(OS、処理系)で作りたいかを教えれ

298 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 19:57:30.73 ]
>>266
なんか、遠い記憶にそんな努力をしたことがあるような、無いような。
ポケコン時代だと、
if文ってスゲー遅いんだよな・・・
それを嫌ってForNextで書いてた。
でも、そうするとコードの容量が大きくなるんだよなぁ。


>>266
224と32にとても意味があるのであれば、ビットシフトを駆使する方法もあるかもねぇ。
a >> 8 が0 なのは ABD
a >> 9 が1 なのは ACD

( a >> 8 ) * ( a >> 9 ) が1なのはD


299 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:04:34.39 ]
色々考えたソースがコンパイラの最適化に勝てないことも多々…。

300 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:06:31.09 ]
比較演算自体内部で分岐命令使ってる気もするがな。


301 名前:デフォルトの名無しさん [2012/01/17(火) 20:06:37.72 ]
>>297
1990年くらいのパソコン。
一太郎しか入ってなかった。


302 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:12:01.09 ]
パソコンのメーカー名と機種のシリーズ名も言えないんじゃなぁな。

303 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:14:06.20 ]
>>301
MS−DOSの頃で、PC9801をターゲットにしてたなら、
テキストVRAM直書きが速かったかも。VRAMに表示文字以外に
確か属性があって、色やブリンクなどをセットできてた。

304 名前:デフォルトの名無しさん [2012/01/17(火) 20:16:56.86 ]
>>303
詳しすぎワロタw


C言語に詳しい人って同時にコンピュータ関連詳しすぎw

305 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:22:07.27 ]
PC-9801プログラマーズBibleが未だに捨てられない。



306 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:24:02.15 ]
>>300
ちゃうちゃう。
サンプルコード書けない理由にもなってるけど、

もしABCDの処理が加算なら、

(加算数A) * ( (~a) >>8 ) + (加算数B) * (a >> 9 ) + .....

と比較しなくてもできる。

>>299
まあねぇ。
特に最近はHyperThreadingとかキャッシュとかねぇ。コードでは全く見えない高速化があるからねぇ。

307 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:25:57.57 ]
>C言語に詳しい人って同時にコンピュータ関連詳しすぎw
アセンブラの次にハードを直接いじるのに適してる言語だと思ってるから。

308 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:36:08.57 ]
>>295
複合機(レーザー)やってたが、PCで作るのは画像データorスクリプトだけだよ。
後は複合機側でやる。色はCMYKを混ぜると全色でる。


309 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:38:23.26 ]
結局はハード屋の奴隷
テレビの画質なんてものはLSIで決まる
Cプログラマは上からレジスタ操作してハードウェア様の機能をオンオフするだけ

310 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:39:05.47 ]
>>308
VxWorks ?

311 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:40:56.60 ]
>>310
大当たりw

312 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:42:15.01 ]
いやいや
メタリックインキや蛍光インキもありますぜ旦那

313 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:42:46.37 ]
>>308
CMYKって表現が分かる人、どのくらいいるのかな?

314 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:42:59.11 ]
>>311
豊橋じゃないってことやねwww

315 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:43:48.60 ]
熱転カラーリボン



316 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:44:14.16 ]
>>314
違う。
豊橋だ

317 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 20:44:28.44 ]
初期の熱転写はすぐ熱ダレしてたな。

318 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 21:37:08.40 ]
>>313
かなりたくさん。

319 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 21:37:45.43 ]
>>312
プリントゴッコなつかしい

320 名前: ◆QZaw55cn4c mailto:sage [2012/01/17(火) 23:11:18.21 ]
>>303
それが、裏VRAM に書く方法が今でもわからなかったりするのです。

321 名前: ◆QZaw55cn4c mailto:sage [2012/01/17(火) 23:13:44.36 ]
>>313
わかんない。シアンマゼンダイエロー、K‥‥‥K‥‥‥K‥‥‥キンタマか?

322 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 23:15:45.85 ]
>>321
ブラック

323 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 23:26:58.27 ]
>>320
バンク切り替えすればいいだけだろ。
ほんと、程度が低いな、お前。

324 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 23:27:49.89 ]
>>320
遙か彼方の記憶なのだが、どこかのポート出力でバンク切り替えしていたような?

325 名前: ◆QZaw55cn4c mailto:sage [2012/01/18(水) 00:17:49.40 ]
>>323
バンク切り替えはどうやればいいのですか?

>>324
www.webtech.co.jp/company/doc/undocumented_mem/
を探してはみたのですが‥‥‥。0A4hか?



326 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 01:40:51.10 ]
何言ってんだお前。
そんなのPC98使ってた人間なら常識だろ。
知らないのに出てくるとは、よっぽどなんだな。

327 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 02:18:15.95 ]
使ってれば常識なの?PC98で開発してればの間違いではないのだろうか。
PC98つかったことないけど。

328 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 02:46:44.23 ]
そうしてたかのように装ったのはお前だろ、QZ

329 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 02:59:37.35 ]
恋は盲目だな。>>327はQZじゃないよ。

330 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 03:35:14.00 ]
プラットフォームを選ばない会話。
x86以外ではmipsしか知らない俺には無理。

331 名前:254 mailto:sage [2012/01/18(水) 08:29:12.36 ]
>>298 比較演算よりビットシフトを使った条件のが速いというのは聞いたことがあります。

>>306 なるほど、条件×加算数 というふうにすればいいのか。
これを使って、いくつか書き直してみたいと思います。

ありがとうございます。

条件とAとBは例で示したものが多いです。
Cは3〜10行くらいです。
Dはいろいろあって、かなり長いです。

332 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 08:40:06.15 ]
とりあえず、いまどきのプロセッサで速度を気にする場合
まず、メモリアクセスと条件分岐を減らすのが基本。

その上で、ビット演算がどうとかいうのは実際に測定してから。

333 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 09:47:49.57 ]
>>331
自分で書いていてなんなんだが、

× ( (~a) >>8 )
○ ( (~a) >>8 ) && 1   //シフトした後1桁目だけを抽出

演算量が増えると、比較した方が早くなる可能性は十分にある。
また、デバッグがしにくい。16進法を脊髄反射で2進法にできるなら問題ないけど。
値の持たせ方も変わってくる(ビット演算しやすいデータ形式で持たせる必要がある)
ポインタを妙に使い出す
フラグを妙に使い出す( int 変数に複数の情報を持たせたくなる )
デバッグ関数( printf で2進法を表示するコードが欲しくなる )
結果としてコードの見通しが悪くなる


なんて特徴もあるからねぇ。注意は必要だけど。

334 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 10:05:23.18 ]
パフォーマンスが気になるなら、
ちょっとばかしアセンブラを勉強して、この資料を見るとよい。

download.intel.com/jp/developer/jpdoc/ia32.pdf

パフォーマンスが厳しい場合、割り算をしたがらない気持ちがよく分かると思うよ。

MOV( メモリからの読み込みなどで使用) が0.5クロック
CALL(関数の呼び出しでよく使われる)で5クロック
RET( Return ) 8クロック
DIV(割り算)が 56〜70クロック

CMP自身は0.5クロックだけど、If文だとJMPを伴うのでもう少し大きいかな?
ビットシフトは、MOVとシフト命令の1.5かな?
関数を使えば、CALLとRETが必要だから最低13クロック以上掛かることになる。

この辺は詳しくないので、説明はできないけど。

335 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 10:52:06.29 ]
なんかスゲー間違えてる・・・気がする・・・
だれか助けて

関数に引数1つをつけて呼んでリターンした場合
movl $0xa,(%esp)        ; 0.5クロック
call 0x4013e1 <func1(int)>  ; 5クロック
mov $0x0,%eax         ; 0.5クロック
leave                ; leaveは実質mov pop movなので、2.5クロック
ret                ; 8クロック
なので、最低 16.5クロック+関数内での演算クロック数が必要

ビットシフトは、
sarl $0x2,0x1c(%esp) ; 4クロック
4クロック+演算クロック数

if文
cmpl $0x0,0x18(%esp)     ; 0.5クロック
jne 0x4013ee <main()+46>  ; 不明:0.5クロック程度?
1クロック+演算クロック数が必要

あれ?
If 文って結構早くね?
てか、ビットシフト遅くね?
If文って分岐予測が当たればさらに高速化するし。



336 名前:デフォルトの名無しさん [2012/01/18(水) 11:53:53.16 ]
ホッケーゲームみたいなのを作ってるんだが
バーとボールの当たり判定はどうすればいいんだ?

337 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 11:57:33.93 ]
>>336
物理演算ライブラリに丸投げ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<223KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef