私は馬のプログラムを作っています。馬の顔があり、ビット マスクを適用したいと考えています。ビット マスクを着用している場合は、馬の目だけが見えるようにする必要があります。まず、馬の顔をデジタルに変換する必要があります。このために、馬の顔の 0、0、0、および 1 を含むビットのセットがあります。
私はC#を使用しており、問題をいくつかの部分に分けました:
- 馬の頭をデジタル化
- 着用するビットマスクを作成します
- ビットマスクを馬に乗せる
- デジタル仮面馬をグラフィックに戻す
ステップ 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 困難であるかどうか疑問に思っています。