質問: (((a & (0x7FF << 52))>>52) - 0x400); return (((a & (1UL << 63)) < 0) ? 1 : -1) * (c > 0 ? ((b(a,11) + 1) * Math.Pow(2, c)) : c < 0 ? (b(a,11) + 1) / Math.Pow(2, c) : (b(a,11) + 1)); } public double to_double(byte[8] a){ return b((a[7]*Math.Pow(2, 0)) + (a[6]*Math.Pow(2, 8)) + (a[5]*Math.Pow(2, 16)) + (a[4]*Math.Pow(2, 24)) + (a[3]*Math.Pow(2, 32)) + (a[2]*Math.Pow(2, 40)) + (a[1]*Math.Pow(2, 48)) + (a[0]*Math.Pow(2, 56))); } double double_decmial(ulong a, int x){ if(x != 11){ return (((a & (ulong)Math.Pow(2, x))<>52) ``` こんな感じです
回答: 質問の答としては ozwk さんの回答がベストだと思います。環境の違いによる動作の違いを気にされているようですが、Unity と C# という条件が決まっているので問題にはなりません。 目的が自作ゲームをユーザーが拡張できる言語の実装のためと捉えました。 しかし、新言語を実装するのにバイト配列との相互変換を新たに作り直すことが必要とは思えません。既存のもので十分、むしろ既存のものの方が品質が高いのではないかと思います。 むしろインターフェースに注力すべきでしょう。 また、新言語を作成するにあたり、構文解析が必要になりますが、これはかなり厄介です。 演算子の評価順について悩まれているようですが、このあたりは一つ一つ見ていくときりがありません。コンパイラコンパイラが使えない状況であるので、このような場合ははテキストをトークンに分割し、構文解析を再帰的に適用します。term のフェーズや expression のフェーズ、様々なフェーズで評価順を決定するのに数値だけ単独で作っていたのでは後々破綻するでしょう。共通する枠組みが必要になります。 C# には C# ソースをコンパイルして実行する機能が含まれています。内部オブジェクトのインターフェースを公開して文法解釈はそちらに任せるというやり方もあります。 あるいはリモートオブジェクトを使う方法もメジャーです。COM では Windows に限定されてしまいますが、.NET にもリモートオブジェクトを使用する様々な仕組みが用意されていますし、例えば json で記述したコマンドをやり取りする方法もあるでしょう。 新言語を搭載し、サンドボックスで動作させるのは面白いと思います。しかしその道のりは大変険しい物です。楽ができるところでは楽をしましょう。バイト配列との相互変換は楽ができるところだと思います。