- 1 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 16:45:25 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 9 pc11.2ch.net/test/read.cgi/tech/1173284217/ 過去スレ Part 1 pc8.2ch.net/test/read.cgi/tech/1146700389/ Part 2 pc8.2ch.net/test/read.cgi/tech/1153818463/ Part 3 pc8.2ch.net/test/read.cgi/tech/1160682950/ Part 4 pc8.2ch.net/test/read.cgi/tech/1162999861/ Part 5 pc8.2ch.net/test/read.cgi/tech/1165022193/ Part 6 pc10.2ch.net/test/read.cgi/tech/1167325490/ Part 7 pc10.2ch.net/test/read.cgi/tech/1170064980/ Part 8 pc11.2ch.net/test/read.cgi/tech/1171946674/ 関連スレ C/C++の宿題を片付けます 84代目 pc11.2ch.net/test/read.cgi/tech/1172981618/ くだすれC言語(初心者用) Part.2 pc11.2ch.net/test/read.cgi/tech/1172099763/ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131 pc11.2ch.net/test/read.cgi/tech/1170338926/ 【初心者歓迎】C/C++室 Ver.35【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1171888583/ 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
- 237 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:34:55 ]
- ポインタpに対して
p[2]が使えたんだけど これは文法的にok?
- 238 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:38:42 ]
- >>237
文法的にはok 論理的(規格の用件に合致する、正常に実行できるなど)な観点からは okかどうかそれだけではわからない。
- 239 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:40:55 ]
- func_t a(void);
void b(void); func_t a(void) { putchar('a'); return b; } これで、ここまで、ならば通る。 func_t b(void); に変えると typedef func_t (*func2_t)(void); func2_t a(void); にしなければならなくなる。 すると今度は・・・ 難しいね。
- 240 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:41:08 ]
- >>237
p[2] の領域が確保されていればおk 例. int a[10]={0}, *p; p=&a[3]; p[2]=0x1234; // p[2] == a[5] なので O.K. p=&a[9]; p[2]=0x5678; // p[2] == a[11] なので N.G.
- 241 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:43:24 ]
- 大学でC言語を習った人がプログラマになってからよくやってしまう間違いや
効率の悪いプログラムの書き方とかあれば教えて下さい(-_-;)
- 242 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:45:58 ]
- >>232 下でキャスト無しでいけるけど、関数の型が変わったらダメ?
typedef void *(*func_t)(void); void *a(void){putchar('a');return b;} void *b(void){putchar('b');return a;}
- 243 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:50:53 ]
- しかし質問者が無反応なのが恐ろしい
- 244 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:50:57 ]
- >>241
よくある失敗はバッファオーバーラン 効率の悪いプログラムの書き方は標準関数を自作してしまう
- 245 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:51:13 ]
- strcpyの代わりにsprintfをよく使っちゃうけど問題ない?
- 246 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:52:55 ]
- >>245
無いよ。
- 247 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:55:22 ]
- >>244
よく自作しようとしてしまう関数って どんなものがあるんでしょうか(-_-;)
- 248 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:59:44 ]
- >>241
局所変数のポインタを返すとか。 値を受け取るための引数に未初期化ポインタを渡すとか。 てか、大学関係ない単なるC言語初心者か。
- 249 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 20:59:50 ]
- >>245
sprintfはstrcpy並に問題ある。 バッファオーバーラン防止のため、snprintf使え。
- 250 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:00:51 ]
- >>232 です
>>234 すみません。 キャストしなくても警告の出ない方法があればと思い質問しました。 >>239 そうなんです。ループしてしまうので宣言の仕方がわからないんです。 >>242 void * にすると代入する時の型チェックが無くなってしまうので できれば関数の型を残したいです
- 251 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:05:28 ]
- char a[]="1,2,3";
int i; のとき sscanf(a,"%d,%s",&i,a); とか sscanf(a,"%s,%d",a,&i); って大丈夫?
- 252 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:11:24 ]
- >>241
エラーチェックをしてないのも多い気がする fopen が失敗したかどうかチェックしてないとか
- 253 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:15:17 ]
- >>252
あぁ…確かにソケット通信のプログラムで 関数のエラーの戻り値を知らずに大変なことがありました(-_-;)
- 254 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:19:29 ]
- >>247
文字列操作する時に多いと思う str??? 関係 (strrchr strcat とか) is??? 関係 (isdigit isalpha とか) あと scanf 系の書式指定で対応できるところを自作するとか printf の %*d 書式相当のものとか
- 255 名前:251 mailto:sage [2007/03/31(土) 21:23:45 ]
- あと
sprintf(a,"%d,%s",i,a); とか sprintf(a,"%s,%d",a,i); みたいに上書きしても大丈夫ですか?
- 256 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:26:15 ]
- >>255
大丈夫じゃないです
- 257 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:32:25 ]
- >>250
ん〜 無理じゃないかなぁそれは typedef func_t (*func_t)(void); こういう宣言が許されない以上キャストするかvoid *使うかしかないと思う それ以前に関数ポインタを戻りとして返さないとダメかな? つまりこういうのじゃダメ? typedef void (*func_t)(void); void a(void); void b(void); void a(void){printf("a");} void b(void){printf("b");} int main(void){ func_t func[]={a,b}; int i; for(i=0;i<10;i++) func[i%2](); return 0; }
- 258 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 21:38:07 ]
- >>257
無理なようですね。 書き方を変えることにします。 >>回答を下さった皆さん どうもありがとうございました。
- 259 名前:255 mailto:sage [2007/03/31(土) 22:51:37 ]
- >>256
sscanf(a,"%d,%s",&i,b); sscanf(b,"%s",a); とか sscanf(a,"%s,%d",b,&i); sscanf(b,"%s", a); とか sprintf(b,"%d,%s",i,a); sprintf(a,"%s",b); とか sprintf(b,"%s,%d",a,i); sprintf(a,"%s",b); でやればいいんですかね?
- 260 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 22:58:07 ]
- >>259
まあそうだが、 信頼できない入力に対して%sを使うのはバッファオーバーランの 危険があるから、やめといたほうがいいとはおもう
- 261 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 23:21:16 ]
- >>260
%100.100sとか書けばええだけちゃうの?
- 262 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 23:28:14 ]
- %as
- 263 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 23:37:43 ]
- じゃこうだね
まあ練習用のプログラムだから int ascii_to_integer(char *ascii) { int i; int integer; integer = 0; for (i = 0; *(ascii+i) >= '0' && *(ascii+i) <= '9'; ++i) integer = 10 * integer + (*(ascii+i) - '0'); return integer; } *(ascii+i)とascii[i]ってどっちが普通? 括弧が少ない分, ascii[i]がよく使われるのかな?
- 264 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 00:48:55 ]
- ascii[i];
の方が俺としては読みやすい
- 265 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 01:09:46 ]
- C FAQを読んで
配列 = ポインタ + 書き換え可能なメモリー じゃないことが分かった さっきまでの自分が恥ずかしい
- 266 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 01:30:58 ]
- 行列の積を解くプログラム教えてください
- 267 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 01:37:56 ]
- ttp://www.google.co.jp/search?q=%8Ds%97%F1%82%CC%90%CF+%83v%83%8D%83O%83%89%83%80&lr
別に煽ったりとかではないが こんくらい、そのまんま検索ひっかかるよ。。。
- 268 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 01:41:10 ]
- ヘッダの中にヘッダをインクルードするのは、
通常どういう見解ですか?Cソースだけにしたほうが良いですか?
- 269 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 01:47:31 ]
- どういう見解も何も、必要だからインクルードしているんだろう。
インクルードガードはちゃんと付けとけよ。
- 270 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 01:53:27 ]
- #ifndef _INCLUDE_ADD_
#define _INCLUDE_ADD_ //内容 #endif >>269 おそらく、こうゆガードですね。有り難うございました。
- 271 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 02:26:34 ]
- >>270
_INCLUDE_ADD_は予約済み識別子なので使わないほうがいい 使用すると未定義動作になる
- 272 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 02:57:15 ]
- >>271
忠告どうもです。予約語意外にします。
- 273 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 03:00:38 ]
- _で始まって大文字や_が続く識別子は全部予約されているので念の為
- 274 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 03:28:59 ]
- >>257
i%2 -> i&1 のほうが速いかも
- 275 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 03:35:29 ]
- >>272
最近は"予想外"が流行りらしいぞ。
- 276 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 07:17:25 ]
- srand()の存在意義が分かりません。rand()にseedを渡す設計にすれば
済みそうなのに、何故わざわざ別の関数にしたのでしょう?
- 277 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 07:25:53 ]
- アフォ
rand()呼ぶたびにいちいちseed渡さにゃならんかったらめんどくさいだろうが
- 278 名前:276 mailto:sage [2007/04/01(日) 08:16:45 ]
- 仮に rand(seed); とするすると、()の中を毎回書くのが面倒ってこと
ですかね? そんなに面倒かなぁ
- 279 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 08:25:51 ]
- じゃなくて毎回同じseedを渡していたら、
randから返ってくる値がおなじになるじゃないか。
- 280 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 08:28:23 ]
- rand(&seed) とすれば seed は変わる。
ただ、こういう実装にすると、 rand のアルゴリズムに制限がかかる。 あるいは、結局 srand みたいなものが必要になる。
- 281 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 08:37:30 ]
- int my_rand(int seed)
{ srand(seed); return rand(); } で別れていれば自分で実装できるじゃん。なのでやりたければどうぞ。 おれはsrandとrandに別れている方がいいので、 my_randしかなければ困ったことになる。
- 282 名前:276 mailto:sage [2007/04/01(日) 08:52:16 ]
- >>280の回答が親切で比較的納得しやすいと思った。
>>281の回答は疑問に対する答えになっていないのでは…… rand(time(NULL)); とでもすればseedは毎回変わるし、これで良いので は? と思ったのが疑問の出発です。レス見て分かったような分からな いような気分だけど、そのうち実感できるときが来るかもしれない。回 答ありがとうございました。
- 283 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 09:09:18 ]
- >>282
それだと、時間が立たない限り 何度読んでも同じ値しか返ってこないよ
- 284 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 09:23:58 ]
- 同じ種で始めれば同じ乱数列が得られるというのも疑似乱数列の
性質としては重要(再現性)なので、基本となるライブラリにある 関数が毎回勝手に裏で種を変えるような造りだと不便な気がする。 必要なら自分でそこにある素材から作れるわけだし。
- 285 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 09:25:57 ]
- >>282
ん。そうか? 別れていれば ・別れている方がいいよ派 ・毎回seedを渡したいよ派 の両方の要求を満たせるということをかいたつもりなんだが、 わかりづらかったかな…
- 286 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 10:31:11 ]
- 配列でできることってすべてポインタでできるなら配列はいらないと思うんだけど
そこんとこどうよエロイ人
- 287 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 10:31:54 ]
- だから、毎回seedを設定してたら乱数にならないんだってば。
- 288 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 10:49:49 ]
- >>286
配列で出来ることでポインタで出来ないことがあります。 なので配列は必要です。同様にポインタも必要です。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 11:32:58 ]
- >>287
「一連の乱数を得る」という単位での「毎回」と読むのであろう。
- 290 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 11:52:23 ]
- 毎回seed渡すrandって単なるハッシュ関数だな
- 291 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 11:53:25 ]
- >>289
一連の乱数を、どうやって一回の関数呼び出しで実現するんだ? 一連の乱数を必要な回数の関数呼び出しで実現するのなら、どうやって連の先頭でのみseedを渡すんだ? それに対する真っ当な回答が、連の先頭でのみsrand()を呼び、以降rand()のみを呼ぶことなんだが。
- 292 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 11:56:01 ]
- >>291
君、読解力ないね。
- 293 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 12:04:14 ]
- >>288
具体的にはどんなことがあるの?
- 294 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 12:33:58 ]
- int a[10];
これをポインタで実現できる?
- 295 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 12:37:10 ]
- >>294
ポインタだけじゃないけど struct linked_list { struct linked_list *next; ... }; を定義してmallocで動的にメモリーを割り当てればおkじゃない?
- 296 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 12:40:16 ]
- >>295
せめて a = malloc(sizeof(int) * 10) を使おうよ。 # より配列らしく使うならallocaにしたいが。
- 297 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 13:51:19 ]
- >>296
alloca? int a[10];がどういう文脈で使われてるか分からんし、 スタックに割り付けることが配列らしく使うことになるとは思えんのだが。 callocなら分からんでもないけど。
- 298 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 14:08:51 ]
- どういう文脈で使われるかわからんのにcalloc()ならなんで「わからんでもない」なんだろ。
- 299 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 14:20:04 ]
- allocaのほうがfreeせずに済む分配列っぽいということか。
ただし、ローカル変数なら。
- 300 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 14:28:18 ]
- callocなら要素サイズと要素個数を別個に指定して割り付けるから配列宣言っぽい、という意味で分からんでもない。
使いどころが限られているallocaよりも、int a[10];がどういう文脈で使われていても、とりあえずcallocはヒープに取れるし。
- 301 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 14:32:14 ]
- >>299
ああ、納得。確かにfreeが不要っていう点ではallocaは配列と共通点を持ってるね。
- 302 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 15:43:45 ]
- >>281
これは seed が更新できないから使い物にならない
- 303 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 15:46:04 ]
- >>294 の意図しているところがワカランのが困る。
どこまで再現して欲しいのか。
- 304 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 15:56:33 ]
- [ ]のオーバーr(ry
- 305 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 16:02:24 ]
- int b[10],*a=b;
- 306 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 16:03:08 ]
- []もオーバーライドできるのか…
- 307 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 16:49:53 ]
- int (*a)[10] = malloc(sizeof (int) * 10);
こういう事がやりたいのか?
- 308 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 17:09:33 ]
- calloc()は0クリアされるという仕様である時点で、ローカル配列とは似ても似つかないのだが。
- 309 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 17:26:43 ]
- それ以前に「要素のサイズと、数を別々に指定できるから、alloca()より配列に近い」ってのも、あれじゃね?
- 310 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 02:59:18 ]
- エイプリルフールも終ったね
ネタは乱数の種と配列をポインタで実現だけか つまらん
- 311 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 03:14:05 ]
- ネタスレじゃないし
- 312 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 11:43:43 ]
- 今年は偽RFC来なかったの?
- 313 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 13:13:23 ]
- 4824
- 314 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 14:15:30 ]
- 手旗信号かワロタ。アブストしか読んでないけど。
- 315 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 16:10:23 ]
- VCExpressでCW_USEDEFAULTが定数として呼び出せないのはなぜなんだぜ?
: error C2664: 'CreateWindowExA' : 4 番目の引数を 'LPCSTR' から 'DWORD' に変換できません。(新しい機能 ; ヘルプを参照) 教えてください。お願いします。
- 316 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 16:17:00 ]
- HWND CreateWindowExA(
DWORD dwExStyle, PCTSTR pszClassName, PCTSTR pszWindowName, DWORD dwStyle, int x, (ry
- 317 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:00:15 ]
- >>316
ズレてたわけですか。 hWnd = CreateWindow(szClassName, "猫でもわかるWindowsプログラミング", //タイトルバーにこの名前が表示されます (LPCSTR)WS_OVERLAPPEDWINDOW, //ウィンドウの種類 CW_USEDEFAULT, //X座標 CW_USEDEFAULT, //Y座標 CW_USEDEFAULT, //幅 CW_USEDEFAULT, //高さ NULL, //親ウィンドウのハンドル、親を作るときはNULL NULL, //メニューハンドル、クラスメニューを使うときはNULL hInst, //インスタンスハンドル NULL); 引用スマソ。EXAではないのですが、EXにして第一引数を加えると : warning C4002: マクロ 'CreateWindowA' に指定された実引数の数が多すぎます。 : error C2664: 'CreateWindowExA' : 2 番目の引数を 'long' から 'LPCSTR' に変換できません。(新しい機能 ; ヘルプを参照) と出ます。ウィンドウクラスはEXなんですが、なぜでしょうか? お願いします。
- 318 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:03:01 ]
- CreateWindowEX': 識別子が見つかりませんでした
違った。こっちがエラーだ
- 319 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:22:31 ]
- 解決しました。誤字があったようで
ありがとうございました。
- 320 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:39:03 ]
- 質問文を作るだけで疑問が解決する事も結構あるのね…
- 321 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:40:40 ]
- 質問しようとして疑問点を整理していくと何が問題なのかわかっちゃうことって結構あるよね
- 322 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:42:39 ]
- それがデバッグじゃね?
- 323 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 17:54:59 ]
- デバッグというより洗い出しというか整理というか
- 324 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 21:40:54 ]
- 何か格言ぽいのなかったっけ
「人に聞く前に目の前のクマさん人形に説明してみろ」 とかなんとか
- 325 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 21:48:39 ]
- うんk
- 326 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 21:55:25 ]
- コンピュータ系の演習室か何かにゴムのアヒルちゃんがおいてあって、
常駐してる相談員に質問する前にはそのアヒルちゃんに質問してから、 というルールがあるという話をどっかで読んだ。
- 327 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 21:59:54 ]
- 「ゴムのアヒルに質問する」という設定だけなら
「達人プログラマー(The Pragmatic Programmer)」 にあった。 なんでアヒル?
- 328 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 22:04:39 ]
- 「ゴムのアヒル」ってのが小さな子供が遊ぶおもちゃの象徴だからじゃないか?
幼児に馴染みのある人形って日本だと何だろう? アンパンマンとか?
- 329 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 22:05:32 ]
- その辺に置いてあったからじゃね?
別にダースベイダーのボトルキャップでもいいわけで
- 330 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 22:43:13 ]
- ビット列の上位から下位までを逆順にしたい。
例えば、 01100111 -> 11100110 というように。 (0bit目が7bit目に、1bit目が6bit目に…) 何かスマートなやり方はありますか?
- 331 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:02:34 ]
- >>330
LUT
- 332 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:32:00 ]
- これでよくね?
int y = 0; if(x & 1) y |= 128; if(x & 2) y |= 64; if(x & 4) y |= 32; if(x & 8) y |= 16; if(x & 16) y |= 8; if(x & 32) y |= 4; if(x & 64) y |= 2; if(x & 128) y |= 1;
- 333 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:41:31 ]
- 全然スマートじゃないけどな
- 334 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:48:09 ]
- 10 進法で考えたら分かりやすくね?
int a = 1365; int b = 0; while (a>0) { b *= 10; b += a % 10; a /= 10; } これを応用して int a = 1365; int b = 0; while (a>0) { b << 1; b |= a & 1; a >> 1; }
- 335 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:50:36 ]
- スマートって結局主観だろ。
他人のことなんてわからん。 余計なことして気分的にスマートって思いたいだけだろ。
- 336 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:56:24 ]
- それに加え「速いのが良ければ実測しろ」だしな。
- 337 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:56:28 ]
- int test8bit(int x)
{ static BYTE table[16] = {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}; int y = table[x>>4] | (table[x&15]<<4); return y; } int test16bit(int x) { int y = test8bit(x>>8) | (test8bit(x&255)<<8); return y; } intは32ビット以上前提で
|

|