ビットシフトを使った掛け算。CASL2などを学んだ方なら動作原理はご存知かと思います。
前回の加算モジュールを利用しています。
関連:http://blog.livedoor.jp/dankogai/archives/50638838.html#module
#defcfunc add int left_op, int right_op, local left, local right, local tmp
left = left_op : right = right_op
while ( left & right )
tmp = ( left & right ) << 1
left ^= right
right = tmp
wend
return ( left | right )
#defcfunc multi int left_op, int right_op, local left, local right, local tmp
left = left_op : right = right_op
while ( right )
if ( right & 1 ) : tmp = add( tmp, left )
left <<= 1
right >>= 1
wend
return tmp
#global
randomize
repeat 10
l = rnd( 9 ) + 1
r = rnd( 9 ) + 1
mes strf( "%1d", l ) + " * " + strf( "%1d", r ) + " = " + strf( "%2d", multi( l, r ) )
loop
stop
2007年10月9日火曜日
論理和とビットシフトで掛け算する
登録:
コメントの投稿 (Atom)
2 件のコメント:
こんばんわellerさん
”りすと”ことre:no.44です
HNは色々考えたあげく
y.tackにしようかな。と考えているのですが
これのHNの変え方がわからない...
それにしてもこのスクリプト
技術に疎い僕でも
あーあれかぁと思って嬉しくなってしまいました
それでは、更新楽しみにしています
コメントありがとうございます。長くて複雑なものが最近多かったので、短いスクリプトをあげてみました。
結構良いスパイスになったのではないかと思います。
コメントを投稿