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


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

【高速化】ビット演算 0x02



1 名前:デフォルトの名無しさん [2006/09/16(土) 09:46:26 ]
前スレ
ビット演算
pc8.2ch.net/test/read.cgi/tech/1123918075/


関連スレ
アセンブラ… (゜□゜) ↑アッー!↓
pc8.2ch.net/test/read.cgi/tech/1148402614/


関連情報
Hacker's Delight
ttp://www.hackersdelight.org/

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
ttp://www.amazon.co.jp/exec/obidos/ASIN/4434046683

ビットを数える・探すアルゴリズム
ttp://www.nminoru.jp/~nminoru/programming/bitcount.html

Bitboard
ttp://en.wikipedia.org/wiki/Bitboard

756 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:15:16 ]
x86ならBSF

757 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:39:50 ]
char bit[256] = {1,2,0,3,0,0,0,4, 略 };

bsf(int n) {
int r;
if ((r = bit[n&255])) return r;
n >>= 8;
if ((r = bit[n&255])) return r + 8;
n >>= 8;
if ((r = bit[n&255])) return r + 16;
n >>= 8;
if ((r = bit[n&255])) return r + 24;
return 0; //解なし
}

758 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:41:33 ]
こんなのどうよ?
bsf(bits){
bits-=1;
int num;
num = (bits >> 1) & 03333333333;
num = bits - num - ((num >> 1) & 03333333333);
num = ((num + (num >> 3)) & 0707070707) % 077;
return num;
}

759 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 04:52:26 ]
>>754-758
ありがとうございます。みんなカッコイイ

760 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 05:52:52 ]
>>757
char bit[256] = { 0,1,2,0,3,0,0,0, 4,0,0,0,0,0,0,0, 略 };
の間違いだった。
んで結果を-1すれば合うんじゃないかな。

761 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 06:23:57 ]
こんなんでどよ
int f(unsigned n){
    int a=1;
    unsigned b;
    n>>=2;
    b = n>>4;if(b)a+=4,n=b;
    b = n>>2;if(b)a+=2,n=b;
    return a+n;
}


762 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 10:45:43 ]
"_\0\5\1\10\6\2__\4\7_\3"[n*0xCA030FF>>28];


763 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 14:50:59 ]
お前頭いいなー、でも
"_\1\6\2\011\7\3__\5\010_\4"
じゃないか

もう少し小さいハッシュもあった
"\1\2\3\010\6\4\011__\7\5"[n*0x5300000>>28];

764 名前:762 mailto:sage [2008/08/01(金) 16:32:34 ]
あー間違えてたーthx
そしてそっちのハッシュのほうが優れているね。



765 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 16:55:45 ]
なるほど、ハッシュってそういう使い方するんだ。

766 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 17:47:48 ]
>>762-763
異次元過ぎてついて行けないのだが解説頼む

767 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 21:25:31 ]
俺もわかってないが
gperfとかで完全ハッシュ関数を作るのと同じように
(文字列ではなく)特定の数字から対応する特定の数値への完全ハッシュ関数を作っているんだと思う。
どうやって導いたかなんて知らん。

768 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 01:40:13 ]
へええ
左シフトしたときに
あるビット範囲(この例だと28ビット目から31ビット目)が
シフト回数ごとにバラけるようにしているのか

シフト回数  (n*0x5300000)のbit28〜31の値
  1        0
  2        1
  3        2
  4        5
  5        10
  6        4
  7        9
  8        3
  9        6

んで配列テーブルをlookupすると。

完全ハッシュ関数って、元が異なれば必ず先が異なる関数のことだっけ。
じゃないとこれ使えないよな。

小さいというのは先の範囲、つまり今回は28〜31の4ビットのことか。
確かに小さいほうがメモリとキャッシュに優しいですな。

という感じであってますか。

>どうやって導いたかなんて知らん。

俺も知りたい。

769 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 01:52:05 ]
頭良すぎる

770 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 01:56:27 ]
2chってすげーな

771 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:03:58 ]
ビット演算ってたしかにすごいけど、
ソースに組み込むときは、その演算の意味とメリットなど
ビット演算を導入した経緯や思想も書いてほしい・・・

ソース理解に時間がかかったり、修正が大変・・・
まあ、俺がお馬鹿なのかもしれないけど。

あと、763って751からの流れなんですか?
それとも別の流れ?

772 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:14:13 ]
最後の2行から見ても明らかに

>まあ、俺がお馬鹿なのかもしれないけど。

が正解。

773 名前:デフォルトの名無しさん [2008/08/02(土) 10:17:05 ]
このスレって頭のいい奴もいるけど、
771みたいなバカもいる。
バカはROMっていろ!死ね771!!

774 名前:それは俺か (w mailto:sage [2008/08/02(土) 10:59:13 ]
まあ、バカにレスする奴はもっとバカだけどな。



775 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:02:09 ]
1、2、4、8、16、32、64、128、256、512の完全最小ハッシュ値を作る。
ttp://www.ic-net.or.jp/home/takaken/nt/slide/hash.html
これか?
>>762は本当に頭がいい。>>763の書き込みがなかったら
意味も解らずスルーするところだった。

776 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:58:48 ]
512の完全ハッシュを作ってそれを1〜9のテーブルに掛けるって事?
分かった気がする。

777 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 13:59:12 ]
>>775
でも、保守する奴が >>762 みたいに頭いいとは限らんから、
仕事のプログラムなら >>754-755 あたりのほうがいいと思う。

778 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:04:14 ]
当たり前。こんなのは所詮パズル。商用コードでこんなの書けない。
>>762みたいなのが許されるのは趣味のプログラミングだけだよ。

779 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:19:14 ]
後は極端に処理速度がネックになってるところとか、
ビックリするほど容量が無いプラットフォームとか、
コンパイラが準備されてなくてアセンブラで書かなきゃいけないような場合、
更にRISCみたいに見た目と実行順が違うような環境だと
読む量が少ない短いコードが逆に役に立つ。
自慢を理由に書くと間違いなく死を招く。

780 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:20:19 ]
コメントで書いておけば十分じゃないかな。
今でもまだまだ、速度やサイズ重視の分野はあるし。だいぶ少なくはなっているけど。


781 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:32:12 ]
現状、用途として大きそうなのはシェーダー周りか。

782 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:36:45 ]
画像処理ならいくらでも速度欲しいけどな

783 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 16:49:03 ]
昔、VUアセンブラの実装をしたが、ライブラリの増加により俺の約700byteのプログラムが
入らなくなり削りに削って「400byteだけ下さい!」と上司に嘆願したのは懐かしい思い出。

784 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 18:57:37 ]
>>777
それは同意だけど、 >>762 のエッセンスを抜き出して、わかりやすくすれば
いいんじゃないかな

おそらく、2^a を掛けると aビット左シフトする、というのは誰にも自明だけど
1〜9の値にマップするマジック定数がややトリッキーかと

なら、見た目にわかりやすいようシフト数を4倍にして、(ついでに右シフトにして)
こんな感じでどうだろうかね(64ビット整数が使えることが前提だけど^^)

/* assume that n is 2^a (1<=a<=9) */
 return (0x9876543210LL / ( n * n * n * n )) & 0xf;








785 名前:デフォルトの名無しさん [2008/08/03(日) 02:24:01 ]
一番右の1を探すとき~a&(a-1)でできますよね、じゃあ一番左の1を探すときは何かありませんか?

786 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 02:37:33 ]
掛け算が4回・割り算が1回ってのが、演算量的に・・・ 俺が8bitに慣れてるからかな?
64bit整数があるにしても、nが32bitならn*nで64bitでしょ。中間結果でbitが失われるんじゃ?

787 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 02:40:55 ]
>>785 754とか755じゃダメなの?もっと速い/小さいのってこと?

788 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 02:55:56 ]
>>785
関係ないがa&(-a)で右端の一ビットを得られるぞ、左端は無理じゃないか

789 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:17:47 ]
www.nminoru.jp/~nminoru/programming/bitcount.html

790 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:41:51 ]
>>787-789
どうもです、今見た資料に左端を操作する命令列は存在しないって書いてあったorz

791 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:56:21 ]
左右反転するビット演算子でもあればね

792 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 03:59:50 ]
a = ( ( a >> 16 ) & 0x0000ffff ) | ( ( a << 16 ) & 0xffff0000 );
a = ( ( a >> 8 ) & 0x00ff00ff ) | ( ( a << 8 ) & 0xff00ff00 );
a = ( ( a >> 4 ) & 0x0f0f0f0f ) | ( ( a << 4 ) & 0xf0f0f0f0 );
a = ( ( a >> 2 ) & 0x33333333 ) | ( ( a << 2 ) & 0xCCCCCCCC );
a = ( ( a >> 1 ) & 0x55555555 ) | ( ( a << 1 ) & 0xAAAAAAAA );

793 名前:784 mailto:sage [2008/08/03(日) 17:00:12 ]
>>786
もちろん変数n は64ビット長
LP64なら long型だと思ってもらえばいいです

演算量については、いまどきの投機実行するCPUなら
下手に条件判定入るよりは速いと思うけど、・・・まあ状況次第ですね

794 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 17:25:07 ]
nが64bitでも、n*n*n*n の中間結果はbit失われるでそ。



795 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 18:31:31 ]
でも、仕事に使うとなると、
「シンプルにしようや」
で終わってしまうんですよね〜
そうすると、754や755に落ち着くのかな・・・

796 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 19:39:21 ]
そりゃそうだよ。

よほど特段の理由が無い限り、シンプルが一番。

797 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 19:51:28 ]
裸が一番いいのと一緒だ

798 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:10:39 ]
>>794
2^9まででしょ?

799 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:12:54 ]
は?

800 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:51:46 ]
0x1 * 0x1 => 1
0x3 * 0x3 => 9
0x7 * 0x7 => 0x31
0xf * 0xf => 0xe1
0xff * 0xff => 0xfe01
0xfff * 0xfff => 0xffe001
0xffff * 0xffff => 0xfffe0001
0xfffff * 0xfffff => 0xffffe00001

これに規則性みたいなものを感じるんですが、
何か法則があるんでしょうか?


801 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 21:54:51 ]
初めの3つはともかく、
9*9=81
99*99=9801
999*999=998001
と同じようなもんだろ

802 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:06:41 ]
よくわからんが、ビット演算とかって、日本人よりも
インド人のほうが面白い発想しそうだね

803 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:09:36 ]
>>800-801
2進数に考えれば、最初から綺麗に並ぶよ。

1 * 1 = 1
11 * 11 = 1001
111 * 111 = 11001
1111 * 1111 = 11100001
11111 * 1111 = 1111000001

804 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:16:49 ]
0xffff * 0x10000 => 0xffff0000
0xffff0000 - 0xffff => 0xfffe0001
特に面白い事実はなさそうだが



805 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:21:59 ]
99*99=9801
これが国民機ナンバーの正体かー
すると8801は?
93.8136 * 93.8136 = 8800.99
収束しないのか

806 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:22:36 ]
収束?

807 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 22:25:25 ]
ごめん適当言った

808 名前:デフォルトの名無しさん [2008/08/03(日) 22:34:48 ]
無理数ね。

809 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 23:10:51 ]
λ... PC-8001, PC8201, PC-6001, &c. ...

810 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 23:48:03 ]
獣の数字にまつわる屁理屈と同じようなもんだな
あえて8801に意味を見出すなら99*99-1100とかなんとか

811 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 23:49:53 ]
9801-1100 = 8701だな
俺頭大丈夫k

812 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 00:08:26 ]
PC9801が長いこと繁栄したのは99*99=9801
こういった力(ちから)を持つ数字が隠されていた影響に違いない。
その証拠に型番が9821に変わろうとしたとたん没落した。
きっと9801のままなら永遠の存在だったんだよ。

813 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 00:11:55 ]
>>798 そうか、9bitのハッシュのエレガントな解法だったのね。ごめん。
ハッシュって、必要の都度、bit数見極めて作らなきゃいけないんだな・・・

814 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 01:24:27 ]
実際に仕事でも使用可能な、
1.実用性がある
2.比較的わかりやすい
ビット演算のアルゴリズムって何だろうね・・・



815 名前:デフォルトの名無しさん [2008/08/04(月) 01:50:11 ]
名前がつくぐらい有名になればいいんじゃないかな。
例えばコメントに
// 762氏ハッシュ
とか書けるぐらいに。


816 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 01:56:23 ]
すみません、
>"\1\2\3\010\6\4\011__\7\5"[n*0x5300000>>28];
の頭の"\1\2\3\010\6\4\011__\7\5"がいまいち良くわかりません。


817 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 02:06:28 ]
ただの文字列リテラルだよ

818 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 02:06:59 ]
コメントに、「ハッシュがどうの」なんて書く奴ばっかだからダメなんだよ。
コメントに絶対に書かなきゃいけないのは、>>751-752だよ。
どういう実装をしたかのコメントなんて二の次三の次。

それなのに仕様のコメントを怠ったままで「すげーテクニック使ってるんだぜ」的なコメントを残しても意味なし。
そんなものを残すぐらいなら、(最低限の>>751-752の他に)assertでも使った範囲チェック入れとけ。

もちろん、>>762のやり方に対するコメント(完全ハッシュ関数とテーブル)はあった方が良い。
けど、仕様についてのコメントの方がはるかに重要。

819 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 03:06:57 ]
日本語でおk

820 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 03:45:03 ]
日本人でおk

821 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 04:32:52 ]
二本イレマスカ?

822 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 04:59:25 ]
イマレス

823 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 08:02:17 ]
#if 0 // オリジナルのロジック
...;
#else // 速度重視で書き換え
...;
#endif

824 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 08:15:04 ]
"..."[...]という書き方をこの流れで始めて知った

何でこのスレにいるかって?
知るために見ているのさ



825 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 09:53:07 ]
K&Rの頃のCをやってた人間からすれば常識

826 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 12:37:57 ]
>>816 文字リテラル "abc"とかならキャラ型の配列だって判るでしょ。
スペース(0x20)より小さい値のcharは 「\8進数」 で書く約束になってる。
"\1\2\3・・・"は、char xxx[ ]={ 1, 2, 3, ・・・, 0 };という配列が生成される。

827 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 13:33:40 ]
>>826
>スペース(0x20)より小さい値のcharは 「\8進数」 で書く約束になってる。
なってない。

828 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 17:24:05 ]
\001 \002 \017 とかだよ。 Hexの場合は \xhh と書く約束になってる。
俺のはLSIC85とか adUc51とか、クミコ系ばっかりで、ANSIは知らないけど。

829 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 18:13:00 ]
0x20以上の値で使ってはいけないという決まりもないわけで。

830 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 22:15:16 ]
最下位8bitについてなら左右を逆転するコードあった筈
こんな感じだったと思うけど、よく覚えてないや

x:src y:dest
s=(x*0x02020202)&0x84422010
t=(x<<3)&0x420
y=(s+t)%1023

831 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 22:49:39 ]
>>792で既出だべ。


832 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 23:59:20 ]
>>828
\n \t \r とかもあるわけで。

833 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 00:45:34 ]
>>832
は?

834 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 01:21:35 ]
文字リテラルが配列の名前???
どうも「文字リテラル+[]」が良くわからん。
ビット演算うんぬんではなく・・・
C言語でこれを書いてコンパイルが通るのか?

どうもこのスレに付き合うには、大学などできちんと学ぶか
元々、この手のことが好きじゃないとついていけませんね・・・

社会人になってから、プログラムを覚えたアホアホな俺の
プリンみたいな脳みそでは、だめかorz



835 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 01:37:17 ]
なんでワカラン??? 大学とか関係ないぞ。

char * buf = "01234567";
char a = buf[0];

が判れば、

char a = "01234567"[0];

だって判るだろ。


836 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 01:41:46 ]
char a = 0["01234567"];

こんなのもある。これが直感的に納得しづらいというのはワカランでもないけど、

char a = "01234567"[0];

こっちは普通だべ。


837 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 09:00:56 ]
>>834
>元々、この手のことが好きじゃないとついていけませんね・・・
当たり前だと思うんだが。

838 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 10:50:52 ]
文字列定数がメモリ空間に配置されている状態をイメージできていないんだな。
プロセスメモリエディタかバイナリエディタと睨めっこでもしてみればいいんじゃね。

839 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 12:25:02 ]
文字列リテラルは、コンパイラがDATAやTEXTのようなセグメントに配置して
プログラムの中に埋め込まれるちょっと特殊なchar[]にすぎん。
"hoge"とか書いた場合、これはそういう配列を暗黙にどっかに確保しろよと
コンパイラに言っているのと同時に、式の中で評価されるときは、その(無名の)
char配列の名前と同等に扱われる。

要はchar[]なのだから、char*な変数に文字列リテラルを代入したり
printf()のような関数に文字列リテラルを引数として渡したり、ということは
普通に・当然のようにやっているはずだ。
さすがにprintf("hello, world"); というコードを見たことが無いとは言わせない。

ならば、[]演算子を適用できるということも当然分かるはずだな。
多分、そういうコードを今まで見たことが無い、見慣れない、ってだけだろう。

840 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 12:32:50 ]
>>834
[]を特殊なものだと思うからいけない。ただの演算子だ。
a[b]とあったら必ず*(a+b)と置き換えが可能だから、ただのポインタ演算とデリファレンスに成り下がるだろ。
デリファレンスするために、aかbのどちらかはポインタでもう一方は整数でないといけないだけだ。

例えばchar a = 0["01234567"]とあったらchar a = *(0 + "01234567")になり、即ちchar a = *("01234567")であり、char a = "01234567"[0]だ。
これでも理解しにくかったら、全部一時変数にしてしまえばいい。
const char * p = "01234567"; int i = 0; として、char a = p[i]; ならわかるだろ。。

841 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 13:15:16 ]
おそらくは、
 配列の名前[インデックス]
のように教えてる参考書の類が悪いんだろう。

842 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 15:15:59 ]
>>834
このスレ開いただけでも望みはある!

843 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 18:04:55 ]
すごいな。叩きが日常の2chで、シロートにここまで優しいのは、久しぶりに見た。

844 名前:デフォルトの名無しさん [2008/08/05(火) 19:53:06 ]
>>838
メモリをイメージする訓練も大切だが、
もっと抽象的に捉える訓練も忘れないで欲しいな。




845 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 20:05:18 ]
そうだなー、最近そういうトレーニング怠ってるかも…俺。

846 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:13:44 ]
>>841
真の文法を書いてる本は稀少なのかね。

847 名前:デフォルトの名無しさん [2008/08/05(火) 21:27:48 ]
>>846
真の文法を書いている本でも、いでおしんくらてっぃくなところは
はしょっているか、読み取れないようにしてるのが多いと思う。
実際、俺なんか、
int typedef integer;
なんて構文が許されるなどとはイソターネットで初めて知った。


848 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:44:04 ]
なるほど、許されない理由がないから許されるんだな。

849 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:47:55 ]
もしかして:void main(void)

850 名前:デフォルトの名無しさん [2008/08/05(火) 22:11:34 ]
>>846
真の文法をサポートする本とはLinuxのことである。
Linux以外は紛い物である。

851 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 00:58:33 ]
>>833
いや、意味が理解できないなら別にいいんだ。

>>839-841
C/C++ に毒されすぎ (w

文字列と文字の配列が互換の言語はあまり多くないから、
"abcd"[0] を >>834 が奇異に感じるのも無理は無いよ。

852 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 00:59:35 ]
[]はmonadの一種でしょ

853 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 01:15:22 ]
みなさん、あほな俺に丁寧にありがとう。
さすがに理解できました。

>多分、そういうコードを今まで見たことが無い、見慣れない、ってだけだろう。
そうですね。はじめてみました。

なんかすっきりしました。
皆さんありがとうございました。

なんかビット演算って難しそうですけど、面白そうですね。
私も、最近処理速度を意識したコードを書く機会があるので
色々参考にします。
(クロックが25KHzなので、処理速度を意識しないといけないんですよ)



854 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 01:31:44 ]
ずいぶん遅くない? 8ビット機のときもMHzだったが。。。




855 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 09:28:35 ]
ケルビン・ヘルツという単位は寡聞にして知らない。

856 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 21:19:11 ]
>ずいぶん遅くない?
そうなんですよ。1サイクル40usなので、ビット操作(ビットクリアやビットセット)で
7サイクル取られるので、7*40=280us=0.28msもかかるんですよね・・・






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

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

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