コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

ビット演算子追加

ちょっと、横道にそれていまして、ColdFire移植予定ですが、OsoScriptを任天堂DS(NDS)に移植していました。キー取得命令などを作ったところ、ビット演算子が欲しくなりまして、追加しました。

//**********************************************
//ビット演算する項を解く関数
//**********************************************
float	bitexp_Term( void )
{
float	value;
  value = compare_Term();
  while( 1 ){
    if( Amatch( "&", 0 ) ){
      value = (float)((int)value & (int)compare_Term());
    }
    else if( Amatch("^", 0 ) ){
      value = (float)((int)value ^ (int)compare_Term());
    }
    else if( Amatch("|", 0 ) ){
      value = (float)((int)value | (int)compare_Term());
    }
    else if( Amatch("$<", 0 ) ){
      value = (float)((int)value << (int)compare_Term());
    }
    else if( Amatch("$>", 0 ) ){
      value = (float)((int)value >> (int)compare_Term());
    }
    else{
      break;
    }
  }
  return( value );
}

比較演算子よりも優先度が低くして、後シフト演算子も作りました。

それと、前回、比較演算子で不等演算子に'<>'を使いましたが、これを止めました。不等演算子は'!='のみとしました。

//**********************************************
//比較評価する項を解く関数
//**********************************************
float	compare_Term( void )
{
float	value;
  value = sumdiff_Term();
  while( 1 ){
    if( Amatch( ">", 0 ) ){
      if( value>p_expression() )	value = 1;	else	value = 0;
    }
    else if( Amatch(">=", 0 ) ){
      if( value>=p_expression() )	value = 1;	else	value = 0;
    }
    else if( Amatch("==", 0 ) ){
      if( value==p_expression() )	value = 1;	else	value = 0;
    }
    else if( Amatch("<=", 0 ) ){
      if( value<=p_expression() )	value = 1;	else	value = 0;
    }
    else if( Amatch("<", 0 ) ){
      if( value<p_expression() )	value = 1;	else	value = 0;
    }
    else if( Amatch("!=", 0 ) ){
      if( value!=p_expression() )	value = 1;	else	value = 0;
    }
    else{
      break;
    }
  }
  return( value );
}

おや、ブログを書いていて気づきましたが、上の比較で読んでいるp_expression()は、sumdiff_Term()の間違いですね。正しくは、下記ですね。

//**********************************************
//比較評価する項を解く関数
//**********************************************
float	compare_Term( void )
{
float	value;
  value = sumdiff_Term();
  while( 1 ){
    if( Amatch( ">", 0 ) ){
      if( value>sumdiff_Term() )	value = 1;	else	value = 0;
    }
    else if( Amatch(">=", 0 ) ){
      if( value>=sumdiff_Term() )	value = 1;	else	value = 0;
    }
    else if( Amatch("==", 0 ) ){
      if( value==sumdiff_Term() )	value = 1;	else	value = 0;
    }
    else if( Amatch("<=", 0 ) ){
      if( value<=sumdiff_Term() )	value = 1;	else	value = 0;
    }
    else if( Amatch("<", 0 ) ){
      if( value<sumdiff_Term() )	value = 1;	else	value = 0;
    }
    else if( Amatch("!=", 0 ) ){
      if( value!=sumdiff_Term() )	value = 1;	else	value = 0;
    }
    else{
      break;
    }
  }
  return( value );
}

今から、修正と確認しよう。

本当にやりたいことリスト

(ブログの終わりにやりたいことを書いておきたいと思います)

  • 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
  • Androidプログラム
  • Web系のプログラム