ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 01:45

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - HIWORD等で使われている割り算・掛け算
作成者 メッセージ
  記事の件名:   引用付きで返信する
ver. 4.01.02において、以下のコードを実行してみると、確かに、#define同等の結果となります。ご確認ください。
コード:
#N88BASIC

Const abc(x) = x * (x-1) * 50
Const xyz(x) = x * 50


print abc(2+1)  'x * (x-1) * 50 : 2+1 * (2+1-1) * 50
                               '= 2+ (2+1-1) * 50
                               '= 2+ 2 * 50
                               '= 102 となってしまいます。
                               ' ご確認ください。

print abc(3)    'x * (x-1) * 50 : 3 * (3-1) * 50
                               '= 3 * 2 * 50
                               '= 300


print

print xyz(4)    ' x * 50 : 4 * 50
                        '= 200
                        
print xyz(3+1)  ' 3+1 * 50 : 3 + 50
                          '= 53
投稿記事 Posted: 2005年6月24日(金) 20:47
  記事の件名:  Re: マクロ関数の()について  引用付きで返信する
> 実際、これで #defineと同様の問題が起こっています。
ABのConst関数はC++のinline関数のようなものなので問題ないと思います。
投稿記事 Posted: 2005年6月20日(月) 19:13
  記事の件名:  マクロ関数の()について  引用付きで返信する
Constによるマクロ関数は、()でくくらないとまずいんじゃないかと。
実際、これで #defineと同様の問題が起こっています。
または BASIC なんだから、自動で()をつけて文字列の置き換えを行うか。
コード:
Const HIBYTE(w) = ( ( (w) >> 8) and &HFF )
Const LOBYTE(w) = ( (w) and &HFF)
Const HIWORD(dw) = ( ( (dw) >> 16) and &HFFFF)
Const LOWORD(dw) = ( (dw) and &HFFFF )

Const MAKEWORD(a,b) = ( ((a) and &HFF) or (((b) and &HFF)<<8) )
Const MAKELONG(a,b) = ( ((a) and &HFFFF) or (((b) and &HFFFF)<<16) )
投稿記事 Posted: 2005年6月19日(日) 22:48
  記事の件名:   引用付きで返信する
そうですね。Const定義にしたほうが処理速度が速くなるので、早速次回のバージョンアップで改良しようと思います。

因みに、修正後のコードは下のようなものになります(function.sbpの一部分)。
コード:
Const HIBYTE(w) = (w >> 8) and &HFF
Const LOBYTE(w) = w and &HFF
Const HIWORD(dw) = (dw >> 16) and &HFFFF
Const LOWORD(dw) = dw and &HFFFF

Const MAKEWORD(a,b) = (a and &HFF) or ((b and &HFF)<<8)
Const MAKELONG(a,b) = (a and &HFFFF) or ((b and &HFFFF)<<16)
投稿記事 Posted: 2005年6月12日(日) 23:50
  記事の件名:  HIWORD等で使われている割り算・掛け算  引用付きで返信する
function.sbpではHIWORD, HIBYTE, MAKELONG, MAKEWORDでは割り算・掛け算が使われていますが,これをビットシフトにすれば高速化できると思います。
あと,これらは簡単な内容なのでConst定義にしてもよいかと思います。
投稿記事 Posted: 2005年6月12日(日) 23:26

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean