7

私は馬のプログラムを作っています。馬の顔があり、ビット マスクを適用したいと考えています。ビット マスクを着用している場合は、馬の目だけが見えるようにする必要があります。まず、馬の顔をデジタルに変換する必要があります。このために、馬の顔の 0、0、0、および 1 を含むビットのセットがあります。

私はC#を使用しており、問題をいくつかの部分に分けました:

  1. 馬の頭をデジタル化
  2. 着用するビットマスクを作成します
  3. ビットマスクを馬に乗せる
  4. デジタル仮面馬をグラフィックに戻す

ステップ 4 では、馬の目だけが見えることを期待していますが、馬の顔でさえない "0" しか見えません。

これが私のコードのすべてです。質問とは関係のない私の ASCII アートに質問しないでください。実際のプログラムは優れたグラフィックスを持つプロトタイプであることに加えて。

//the head of the horse
string head = "#      #" +
              "########" +
              "#O    O#" +
              "#      #" +
              "#      #" +
              "#=    =#" +
              " #====# " +
              "  ####  ";
//digitize the horse into bits of binary
string binaryHead = head.Replace('#', '0').Replace('=', '0').Replace(' ', '0').Replace('O', '1');
long face = Convert.ToInt64(binaryHead, 2);

//make a bit mask with holes for the eyes
string mask = "11111111" +
              "11111111" +
              "10111101" +
              "11111111" +
              "11111111" +
              "11111111" +
              "11111111" +
              "11111111";

//apply the bit mask using C#
long maskBits = Convert.ToInt64(mask, 2);
string eyesOnly = Convert.ToString(face & maskBits, 2);
//eyesOnly is "0"....WHAT??? It should be more than that. WHERE IS THE HORSE??
//It should look like this:
//              "00000000" +
//              "00000000" +
//              "01000010" +
//              "00000000" +
//              "00000000" +
//              "00000000" +
//              "00000000" +
//              "00000000";

変換に問題があると思われます。バイト配列に変換したり、文字列をスペースでフォーマットしたりするなど、あらゆる種類のことを試しましたが、うまくいきませんでした。この問題が NP 困難であるかどうか疑問に思っています。

4

2 に答える 2

3

faceeyesOnly共通の 1 ビットはありません。目以外maskBitsはすべて残します。とを交換するか、演算子を使用してを反転します。そして、それがのためのマスクであるかが明確になるように、より適切な名前を付けます: .01~maskBitsbitmaskForNotEyes

于 2014-06-04T12:09:53.813 に答える
2

問題は -

string binaryHead = head.Replace('#', '0').Replace('=', '0').Replace(' ', '0').Replace('O', '1');
  1. まず、すべて'#'を に変更し'0'ます。
  2. 次に、すべて'='がに変更されます'0'
  3. すべて' 'に変更され'0'ます。
  4. 最後に目を向ける'1'

したがって、変換後の頭は次のようになります -

string head = "00000000" +
              "00000000" +
              "01000010" +
              "00000000" +
              "00000000" +
              "00000000" +
              " 000000 " +
              "  0000  ";

今、あなたはそれをやっ&ています -

string mask = "11111111" +
              "11111111" +
              "10111101" +
              "11111111" +
              "11111111" +
              "11111111" +
              "11111111" +
              "11111111";

したがって、出力は明らかに0.

于 2014-06-04T12:00:11.210 に答える