hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
アドベンチャーエンジン/変数・演算 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

アドベンチャーエンジン

変数・演算

変数の取扱い方法や、演算処理(条件判断、四則演算)の開発作業を行います。

変数は3次元文字列配列を用いて実現しようと思います(^^

sdim variable, 64, 256, 1
1次元目:変数名
2次元目:変数の内容(全て文字列として保持します)
3次元目:変数の型( s = str , i = int , d = double )
  • 値の参照
    二分検索にしようかなぁ、と。
    もっと効率のよい方法があれば、教えてくださいm(_ _)m
  • 値の代入
    検索をして、一致しなければ新規で作ります。
    作った後は、ソートをします。
  • 内容のソート
    1つめと2つめを比べて・・・・というのを要素数分繰り返すことで、ソートします。
    同じく、もっと効率のよい方法があればお願いします☆

変数へのコメント

  • こんな感じですか? - GENKI?
      1
      2
      3
      4
      5
      6
      7
      8
    
     
     
     
     
     
     
     
     
    
    sdim variable, 64, 3, 256    ;変数256個分を確保。
    variable.0.0 = "変数名1", "内容1", "型1"
    variable.0.1 = "変数名2", "内容2", "型2"
    ;...
    mes variable.0.0    ;変数名
    mes variable.1.0    ;内容
    mes variable.2.0    ;型
    stop
  • そです!こんな感じです(^^☆ 型は1バイトで充分だと思います。- りさ
  • もしかしたら、int型が必要ないかもなので、それならば、0 = double , 1 = int でいいかもです。- りさ
  • sdimは1つの変数につき指定した同じサイズでしかメモリを確保できません。なので1個だけ1バイトとかムリです。 - GENKI?
  • あっ、はい☆あくまでもプログラム上では1バイトしか使わないって感じで(^^☆

演算子

シナリオスクリプトの中で数値や変数を使った計算を行う(予定)ときに使用する演算子です。
どの演算を可能にするのか、どの記号を割り当てるのかなどをここで検討します。

演算子名前導入
代入演算=代入演算子
+=加算代入演算子
-=減算代入演算子
*=乗算代入演算子
/=除算代入演算子
%=剰余代入演算子
&=ビット積代入演算子
^=ビット差代入演算子
|=ビット和代入演算子
<<=ビット左シフト代入演算子
>>=ビット右シフト代入演算子
四則演算+加算演算子
-減算演算子
*乗算演算子
/除算演算子
%剰余算演算子
条件演算==等価演算子
<左不等号演算子
>右不等号演算子
!=非等価演算子
<=等価左不等号演算子
>=等価右不等号演算子
論理演算&&論理積演算子
||論理和演算子
ビット演算&ビット積演算子
^ビット差演算子
|ビット和演算子
<<ビット左シフト演算子
>>ビット右シフト演算子

四則演算

ここでいう演算とは、四則演算(+-*/)に余り(\)の5種類を指します。
演算方法は以下のようにして行いたいと思います。

  • 演算は逆ポーランド記法で計算します。
  • = の以降を文字列として取得し、それを変換します(これが難しいですが)
  • オペレーターとオペランド(演算子)を配列に代入し、RPNにより計算し式の値を取得します。 もっといい方法があったら、提案して下さると嬉しいです(^^

式解析

タイトルの通り、演算を出すことが目的です。
エンジン開発で使用していますが、多々応用できると思いますのでここに載せます(りさ

式を解析する前に、どのような式があるかを書いてみました。

a = 1
b = "おはよう"
c = num

x = ( 2 + 3 ) * 4 - 10
y = - 5 * x + 2 * ( 9 % 3 )
z = "「ねぇねぇ" + "りさちゃん!」"

h = int( j )
i = ( d == e ) || ( f == g )
k = !( t )

m += n = 10
r ? p1 : p1
v ++ 

ここに列した一行一行が一つの式です。

では式の型はなんでしょうか?
正解は「文字列」です。

つまり、文字列である式を理解し、値を演算により算出するのが「解析」にあたります。

オペレーターとオペランド(演算子と被演算子)[operator & operand]

プログラミング言語において、たとえば

x = 1 + 2

という式は、「 1 と 2 を加算した値を x に代入する 」という意味になります。

このとき「加算しろ」という意味の + 、「代入しろ」という意味の = を演算子と呼びます。
逆に、演算が作用する対象の値のことを被演算子と呼びます。

演算子のことをオペレーター、被演算子のことをオペランドとも言います。

ではどんなオペレーター(演算子)があるのかを見ていきましょう。 HSPの演算子だけではなく、知っていて損はない程度で紹介いたします(^^

演算子名前
代入演算=代入演算子
+=加算代入演算子
-=減算代入演算子
*=乗算代入演算子
/=除算代入演算子
%=剰余代入演算子
&=ビット積代入演算子
^=ビット差代入演算子
|=ビット和代入演算子
<<=ビット左シフト代入演算子
>>=ビット右シフト代入演算子
四則演算+加算演算子
-減算演算子
*乗算演算子
/除算演算子
%剰余算演算子
比較演算==等価演算子
<左不等号演算子
>右不等号演算子
!=非等価演算子
<=等価左不等号演算子
>=等価右不等号演算子
論理演算&&論理積演算子
||論理和演算子
ビット演算&ビット積演算子
^ビット差演算子
|ビット和演算子
<<ビット左シフト演算子
>>ビット右シフト演算子

ここで紹介したのは、代表的な、様々な言語で使用可能な演算子です。
逆に言えば、全ての演算子ではないのでお間違えのないように☆

プログラミング言語によって、有効とされている演算子の種類は異なりますが、 それぞれの演算子はだいたい同じ意味で使われています。

一方、オペレーター(被演算子)には、大きく分けて「数値型」と「文字列型」の型が存在します。

HSPでは、数値型は整数実数に分けられ、

3 , 10 , 60        // int
3.14 , 10.0 , 60.  // double

文字列は

"My name is RySa"  // str

として存在しています。

なお、オペレーターとオペランドを組み合わせることで成っている値を「」といいます。
式が持つ一つ一つのオペレーター・オペランドのことを、トークンと呼びます。

x = 5 - 4

オペランド  5 , 4 , x
オペレーター  = , -

式      x = 5 - 4
トークン   x , = , 5 , - , 4

(式のことをフォーミュラ[formula]といいます。方程式ではないのでイクエーション[equation]ではないデスよ)

ではトークン(オペレーターとオペランド)を組み合わせてできた「文字列」である式を演算したいと思います。

中置記法

中置記法[infix notation]について・・・

例えば、数学で習う

5 + 2

という式は、オペランドとオペレーターを中置記法で記述された式です。

この中置記法というのは、直接作用し合うオペランドとオペランドの間にオペレーターを置く記法を指します。

エンジン用ですが、中置記法での式解析モジュールを naznyark?さんに作っていただいたのでご紹介します。

中置記法サンプル

+  infix notation

改良版デス(bynaznyark?さん)

+  変更点
+  infix notation
+  更新内容デス
+  naznyarkさん更新
+  2006-11-07 更新内容
+  変更点
+  変更点
+  意見



変更点です

StringToToken 関数内で、errorcode_ 値を変更させるようにした
cindex_ += w をまとめて関数内最下で実行( w と cindex_ の結びつきが分かりにくくなっちゃった気が・・)
errorcode_ の内容を詳細表示

エラーはどんなエラーの可能性があるのか検討しています。
メッセージ数を256個用意していますが、必要ない部分は削りますので、仮のバッファだと思ってください。

最新のファイルです。

+  mdl_formula.as

(メインページからダウンロードして貰ったほうが楽なハズです)

前置記法/後置記法

中置記法を見て、「そんなの当たり前じゃん、これ以外に何があるの?」って思われた方。
前置記法[Prefix Notation]後置記法[Postfix Notation]というのがあるんです(^^

前置記法とはその名の通り、
直接作用し合うオペランドとオペランドを並べ、その前にオペレーターを置く記法を指します。
別名をポーランド記法[Polish Notation]といいます。

同じく後置記法とは、
直接作用し合うオペランドとオペランドを並べ、その後ろにオペレーターを置く記法を指します。
別名を逆ポーランド記法[Reverse Polish Notation]といいます。


まずは分かり易いように、中置記法から後置記法へ変換してみましょう(手動で)。

Infix   : 2 + 1
Postfix : 2 1 +
Infix   : ( 1 + 2 ) * ( 4 - 2 )
変換中    ( 1 2 + ) * ( 4 2 - )
Postfix : 1 2 + 4 2 - *

前例はそのままオペレーターを演算する2つのオペランドの後ろへ置いただけです。
後例は、( )内の方が優先順位が高いので、その中から変換していきます。
そうすると(A)*(B)の形になりますので、同様に(A)(B)* に変換します。

お気づきになった方もいると思いますが、括弧を使わないのが特徴です。
また、そのまま読めば日本語で読めることが分かります。

2 1 +
2 と 1 を + する
1 2 + 4 2 - *
1 と 2 を + したのと 4 から 2 を - したのを * する。

このため、俗に「日本語記法」とも呼ばれています☆

「計算したいのに、こんなことして意味あるの?」と思った方(^^!

例えば、電卓で 4 * ( 6 * 2 - 9 / 3 ) という式を演算したいとき、どうやって値を出しますか?

まず、6と2を掛け、9を3で割って、それらを引いて、それに4を掛ける・・・ アレ? これって日本語記法と同じじゃないデスか!?と気付きますよね。

実際に演算する場合は「後置記法」は非常に優れた形式(構造)を持っていることが分かります。
前置記法も構造は同じですが、オペランドが先の方が整理しやすいので、ここでは後置記法で解説します。

電卓などにも使われている逆ポーランド記法、ご紹介します。

ではもう少し具体的な例を挙げてみましょう。

  • 5 + 3 ... 5 3 +
  • 9 - 2 ... 9 2 -
  • ( 1 + 3 ) * 2 ... ( 1 3 + ) * 2 ... 1 3 + 2 *
  • ( 9 - 1 ) * ( 2 + 1 ) ... ( 9 1 - ) * ( 2 1 + ) ... 9 1 - 2 1 - *

となります。

これをHSPで演算してみます。 3番目の例を使って説明しましょう。

  1. 配列に一つ一つのトークン*1を並べます。
  2. 下の図で、配列の先頭要素から読み込み、オペレーターを探します。
  3. 見つかったら、オペレーターの2つ手前の内容と一つ手前の内容をオペランドとして計算します。
  4. それを改めて配列に入れます。オペレーターより後の内容はそのままずらすだけです。
  5. 要素数が1になるまで繰り返します。
    要素番号
      (4)       *
      (3)       2
      (2)       +    *
      (1)       3    2
      (0)       1 → 4 → 6
まず初めに先頭から探していくと、(2)の + が見つかります。
2つ手前の(0)と1つ手前の(1)を演算子+で計算します。
結果を(0)に入れ、(3)以降をそのままずらします。
つまり1回のループで、2つの要素が消えます。

最終的に 6 が残りますので、これが答えです。
詳しくは、「Reverse Polish Notation」「逆ポーランド記法」「RPN」などで検索してみてください。

後置記法サンプル

+  Postfix Notation

変数管理

式解析で使用した「変数」用の配列変数を管理してみます(^^

+  mdl_var.as

変数のソートと検索2はかなり強引なのですが、他にどんな方法があるんでしょうか(^^?? -- りさ

[ 改造点 ]
- Var_Find での検索を二分検索に変更。
  それに伴い未発見時の戻り値を -1 から不定の負値に変更。
- 内部で検索に使う変数 listvariable 追加。
- Var_AddNew で同名変数の多重登録を禁止したら実質 Var_FindNew と同じものになってしまったので(笑)
  Var_FindNew にまとめた。(関数名は AddNew のほうが良かったかな?)
+  mdl_var_20061031.as

演算へのコメント

  • 計算部分ですが、文字列の計算モジュール?というのが使えそうな感じです。まだ中身をよく見てないのでなんとも言いがたいですが…。 - GENKI?
  • ホントですね・・・こんなのがあるんですね☆ちょっと読んできます!
  • そのままでは変数は使えないみたいです。使用前に変数の部分を変数の中身の数値や文字列に置換してから使えば、計算部分はそのまま使えそうですね。-- GENKI?
  • 中身を見てもマシン語使われるともうお手上げです。実行確認もしてませんorz
  • 同じく全く分かりませんでした(笑) -- りさ 2006-10-23 (月) 22:13:59
  • 逆ポーランド…なんだかもはやAVGの範囲外みたいな領域ですね…(^ ^; -- GENKI? 2006-10-23 (月) 23:30:27
  • 範囲はもしかしたら、構文解析の方かもしれマセン(^^☆ -- りさ 2006-10-24 (火) 02:36:38
  • 一応、頑張って作ったのを載せました。これ、ホントに疲れました(笑) -- りさ 2006-10-24 (火) 02:49:01
  • なんだか難しくてよく分かりませんが、すごいですねお疲れです。今日は調子が悪いのでもっと調子がいい時に読んで見ます(~~;;;;)。あといつの間にか変数対応してるし!!行動力に感服! -- osakana 2006-10-24 (火) 13:54:38
  • アリガトございます☆変数はもうすぐ実装できますので、ぜひサンプルを見てください(^^☆ osakanaさんのモジュールを参考にtstrを影文字対応にしてみました☆あと、DelSpace? はそのまま使わせていただきますm(_ _)m -- りさ 2006-10-24 (火) 16:29:45
  • 今読んだら、わかりました逆ポーランド。 -- osakana 2006-10-25 (水) 19:56:41
  • 出来たと思ったんですが、完璧には動いてくれないみたいで・・・(涙) -- りさ 2006-10-25 (水) 21:30:35
  • このページにある 10/24版の話ですが、( )処理がおかしいようで (1+2+3) とかでハングします。
    で、修正版filemdl_rpn_20061024_fix.hsp
    -- naznyark? 2006-10-26 (木) 01:57:15
  • さらに空気読まずに中置表記法前提の別版filemdl_calc_infixexp.hsp -- naznyark? 2006-10-26 (木) 01:57:15
  • キャウッ(^^¥実は昨日デバッグを続けてたんですが、気が付いたらベッドの中にいました☆ バグ修正ありがとうございますm(_ _)m -- りさ 2006-10-26 (木) 10:57:51
  • 実は結構・・お手上げだったんデス(汗)ホントに助かりました。別版も試させてもらいますネっ☆ -- りさ 2006-10-26 (木) 11:21:09
  • 完璧に行き詰ったので、現在開発中のRPNモジュールを上にUPします。とても勝手なのは承知していますが、もしデバッグできましたら、よろしくお願いします☆ -- りさ 2006-10-26 (木) 13:03:13
  • filemdl_rpn_bug_fix.as
    とりあえずサンプルの不具合は解消、他も少々。(修正時の小ミスはあるかも・・・) -- naznyark? 2006-10-28 (土) 00:21:20
  • naznyarkさん、なんとお礼を言っていいか・・・☆ケアレスミスがあること自体、まだアタシが「完全に行き詰る」手前だった証拠デス。すいません。 指摘して頂いたところを含め、もう一度、一から見直してみようと思います☆デバッグほんとうにありがとうございますm(_ _)m -- りさ 2006-10-28 (土) 04:41:18
  • naznyarkさんに修正して頂いたスクリプトは、今のところバグなく作動しているみたいです☆ 演算が正しくないのは、1+2+3 のような同じ優先順位の場合に、それ自体をもう一度探しにいってなかったからなんデスね。何度も試して、その事実には 気づいていたのですが、どこまで探しに戻ればいいか・どこで折り返すべきかなどに辿り着けませんでした(涙)
    +  nest_level
  • 別版(中置表記法、優先順位による内部処理)の新版。filemdl_calc_infixexp_20061029.hsp
    条件演算子はどうするかな・・・ -- naznyark? 2006-10-30 (月) 00:08:14
  • これ・・スゴイ( ̄▽ ̄/ 変数操作モジュールはRPN版でも使えるように考えてもらえたんデスかにゃ(^^??しかしこのコード量で中置記法なんて☆ -- りさ 2006-10-30 (月) 02:51:52
  • 式解析のトピックを作ってみました。中置記法解析は詳しく知らないので、ここまでにしておきます(笑)条件演算も欲しいっ☆・・ところで、このモジュールとサンプルを作るのに、全部でどのくらい時間かかりました?? -- りさ 2006-10-30 (月) 02:54:56
  • 結局、RPNの方は、文字列を受け取って、(あれば)変数に代入して、式の値を返すような一つのモジュールにしました☆ まだやりたいことがいっぱいあるので完成までは程とおいかもデス(^^¥この中置の方はエンジンに使わせて貰っても大丈夫なんデスか( ̄w ̄? -- りさ 2006-10-30 (月) 02:58:47
  • > この中置の方はエンジンに使わせて貰っても大丈夫なんデスか( ̄w ̄?
    もちろんかまいません。
     
    > ところで、このモジュールとサンプルを作るのに、全部でどのくらい時間かかりました??
    実のところ別件で実験・研究していたアルゴリズムを HSP3上で実装したものなので期間でいうとアルゴリズム構想:2ヶ月、実装作業:1週間(実作業時間は不明(忘れた))というところです。(参考にならないですね・・・) -- naznyark? 2006-10-31 (火) 03:27:40
  • いえ、参考になりましたデス☆アルゴリズム2ヶ月でできるものなんですね〜。一応全部読ませて貰いました、感動デス(^^ところでCIEって何の略デスか?? ~ エンジンで使えるようにちょっと変えてみますぅ(^^/ -- りさ 2006-10-31 (火) 15:59:18
  • CIE : Calculate(計算) Infix(中置) Expression(式) 私は「式」を「expression」で訳しました。-- naznyark? 2006-11-01 (水) 02:40:42
  • filemdl_var_20061031.as。mdl_var.as の改造版。-- naznyark? 2006-11-01 (水) 02:40:42
  • ナルホド、Expression とも言いますネ。Formulaはどっちかというと数学的かもデスね☆ところで、listvariableが複雑で(数行なのに)よく分かりません(涙)じっくり眺めてみます(^^ -- りさ 2006-11-01 (水) 05:57:50
  • やっとワカリマシタ☆listvariableの存在が思ったより複雑(変数 i との絡みが)だったので時間かかっちゃいました(汗)巧妙デスね、少し強引デスが★やっとエンジンと同期(?)させられたので、実際に使わせていただいてマス(^^/二分検索も含めてアリガトウございますm(_ _)m -- りさ 2006-11-01 (水) 17:10:36
  • filemdl_fa_if_20061102.as。更新。-- naznyark? 2006-11-03 (金) 01:14:44
    +  変更点
  • 変更点、全部確認しました(^◇^)明日からお休みなので、CIE_関数を解読してみよぉ〜と思います★アルゴリズムを完璧に理解したいデス・・・。関数も考えているんですが、その方法とかも見つけられたらなぁと思っていますm(_ _)m -- りさ 2006-11-03 (金) 16:24:52
  • あと少し前に custombutton と WindowFromPoint? でリンクを実現できるって教わったのを使いたいな、と思ってマス。モジュールも少し触りたいので、そっちも読ませていただきますデス☆ -- りさ 2006-11-03 (金) 16:30:14
  • 思ったんデスが、「変数」を関数から参照しているのであれば、表に出す必要はないんですね☆variable@ => variable など直しましたっ!あと、変数名判定関数や数値定数判定関数を作ってみたり、文字コード ' ' や16進数や2進数に対応してみました(^^★エンジンで使っているのを中置記法の一番下に置いておきますデス( ̄▽ ̄/ -- りさ 2006-11-05 (日) 12:20:49
  • filemdl_formula_20061106b.asfilemdl_formula_20061106c.as。更新。 c は検索まわりで少しわかりにくい処理をしているので素直な処理をしている b もアップしておきます。 それとモジュールテスト用プログラム filemdl_formula_test_20061106bc.hsp -- naznyark? 2006-11-07 (火) 01:28:40
  • 演算子単体での動作チェックはしているけど、このぐらいになると組み合わせた場合の動作はチェックしきれません。不具合・怪しい計算結果は報告してください。 -- naznyark? 2006-11-07 (火) 01:33:24
  • 全部読ませていただきまシタ☆もちろん、動作確認はさせていただきマス☆☆アタシが直せないようでしたら、ここに載せるようにシマス(^^@ それから色々と変更・追加しました。最新のものは前回と同じ場所(中置の最下)にありますので、みてみてください☆
    +  変換
  • これを(↑)見てください。16進数へは "$"をつけると変換されますが、"0x"ではダメです。さらに、2進数へは"0b"でも"%"でもダメです。それから、"$10" は16ですが、"$10 "とスペースが入ると"$100"と同じになります。ちなみに10進数は "10" も "10 " も同じ値になります。(スペースの問題は、なぜかwin9x系だけで、NT系は大丈夫です) このモジュールでは空白は無視するのでこの問題は大丈夫なんデスが・・・。変換のところはそれに対する処理をしてる(つもり)デス。
  • mdl_formula はエラー処理が微妙だったので(ダイアログだったり戻値だったり)、それも考えました。詳しくは、中置記法の最下を見てくださいm(_ _)m -- りさ 2006-11-07 (火) 11:29:33
  • filep_mdl_formula_20061108.as。変更個所のみの断片 -- naznyark? 2006-11-09 (木) 02:52:39
  • 8進数の判定の件、申し訳ありませんデシた。明らかにアタシのミスです(涙)断片を埋めて、少し訂正しました。中置の最下に置きますm(_ _)mバグ?報告と共に☆ -- りさ 2006-11-09 (木) 05:11:39
  • りさ さんからの報告に対する私の意見をその報告の下に追加しました。-- naznyark? 2006-11-10 (金) 01:59:27
  • お返事ありがとうございマス☆それ以上に、サイドスクロール可能な整形済みテキストにビックリしましたΣ( ̄▽ ̄/ -- りさ 2006-11-10 (金) 02:40:08
  • 変更点を続けて書きました。 -- りさ 2006-11-13 (月) 03:57:45
  • 小ワザgosubを関数みたいに使う?を書きました。例えば演算には式から項を呼ぶとかそういうのが必要だと思います。宜しければ参考にして下さい。 -- りすと? 2006-11-19 (日) 03:03:12
  • 「演算には式から項を呼ぶとかそういうのが必要」言ってる意味がわからんね。 -- 2010-05-22 (土) 09:30:11

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

比較演算

条件式に用いる記号は次のものがあります。

==同じ
<未満
>より大きい
!=同じでない
<=以下
>=以上
  • この <> っていうのは、何で使われているんですか(^^??
    • vbsとかで使われていますよ。まぁ全部実装しなくてもいいと思います。「こういう種類の記号を他では割り当てている」という一例だと思います。 -- kz3
    • VBSですかぁ☆ <> で検索してもでてこなかったんで・・アリガトウございますm(_ _)m 全く同じ機能でしたら、!=で充分ですね(^^ -- りさ
    • 「<,>,」とマニュアルに書いてあったのを見間違えたようです。(- -; Excelでも使用されるので、HSPの演算子と混同して載せてしまいました。m(_ _)m というわけでリストから外しときます。 -- GENKI?
  • [ = ] と [ ! ] は他の意味で使いたいと考えてます( = は代入、 ! は否定で)-- りさ

論理演算

&&論理積
and
||論理和
or
  • HSPにはないだけに、実装してみたいなぁ・・・-- りさ
  • 論理演算とビット演算て同じじゃ無いんですか??--osakana
  • 上手く説明できないんですが、例えばこーいうループがあったとき、
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 
 
 
 
 
 
 
 
 
 
 
 
x = 2
repeat
    stick key
    if ( key ) & ( x ) :break
    await 1
loop
 
//ビット積の & を使うと、
// key ( ???? )
// x   ( 0010 )
// の積が真にならなければ、break しません。
// つまりこの場合、key = ??1? ( ↑キー ) を押さない限りは無限ループになります。
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
 
 
 
 
 
 
 
 
// もしHSPに論理積 && があったとしたら、
x = 2
repeat
    stick key
    if ( key ) && ( x ) :break
    await 1
loop
// key ( ???? ) と x ( 0010 ) が共に真であればいいので、
// なんらかのキーが押されたときに、breakします。( x ) は常に真デス。
  1
  2
  3
  4
  5
  6
  7
  8
 
 
 
 
 
 
 
 
// これをHSPで実現すると、
x = 2
repeat
    stick key
    if ( key != 0 ) & ( x != 0 ) :break
    await 1
loop
// となります。説明下手でスイマセンっ(汗)
  • わざわざサンプルを交えた説明有難うございます。
    書き込む前に少し調べたら論理演算はビット演算とも言うみたいなことが書いてあったので
    よく分からなくなってしまいました。
    と言う事は && では x が4でも5でも偽以外でなら何でも良く、キーのどれかでも押されれば
    充たされると言う事ですか? --osakana
  • そです☆ ちなみに、
    ビット演算子では「ビット」と「ビット」を比べ、その演算結果を式の値としますが、
    論理演算子は「真偽」と「真偽」を比べ、その演算結果を式の値とします(^^ -- りさ
  • なるほど!!よく分かりました。
    電球で言うと光度に関係なく光ったか光ってないかだけを見るという事ですね。
    水道で言うと水量に関係なく・・・(しつこい!) --osakana
  • if key :if x :ですね!(もういいって;) --osakana
  • C言語での key && x はその方が正確。key の値だけで結果がわかれば x の値は調べません。 -- naznyark?

ビット演算

&ビット積
^ビット差
|ビット和
<<ビット左シフト
>>ビット右シフト
  • 実装・・・けど、アドベンチャーでビット操作しますかねぇ? -- りさ
  • とりあえずHSPで使ってるのを全部のせちゃったので…。使うとしたらフラグ管理で使うことある?かな?(^ ^;; -- GENKI?
  • 出来ないから使えないのと、出来るけど使わない。この差を噛みしめたい(笑 --osakana
  • 確かにフラグ管理には使いますね!! 噛み噛み☆ -- りさ

コメント

  • 表の中で「|」ってどうやって表示するんでしょう? -- GENKI? 2006-10-22 (日) 10:14:52
  • あ、どなたか存じませんが、「|」の修正ありがとうございます! -- GENKI? 2006-10-22 (日) 10:34:56
  • or だけ難しいんですね(^^; -- りさ 2006-10-23 (月) 22:15:09
  • wikiの表ってスゴイ難しいっ(^^; -- りさ 2006-10-25 (水) 21:55:10
  • wikiを編集する上で、整形済みテキストを多用するとちょっと読みにくくなるのでwikiのマークアップベースで書いたほうがいいですね [smile2] -- kz3 2006-10-26 (木) 17:12:51
  • ワカリマシタ( ̄- ̄ヾ整形済みテキストがあまりに簡単なのでつい・・・ [syobon] -- りさ 2006-10-26 (木) 17:48:47
  • ま、その辺は分かる人が見やすいように直してくれるでしょう。(私とか...&ref(): File not found: "ojigi.png" at page "pic";) -- kz3 2006-10-26 (木) 20:28:53
  • 私が見やすいといっても他の人はそう思わないかもなので、またその時は見やすいようにお願いしますね [smile4] -- kz3 2006-10-26 (木) 20:31:28
  • ハ〜イ( ̄▽ ̄/ kz3さんにはいつもお世話になって・・M(__)M☆ -- りさ 2006-10-26 (木) 21:06:28


*1 オペランドとオペレーター
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2010-05-22 (土) 09:30:11 (1296d)