无法应用位掩码

时间:2014-06-04 11:51:48

标签: c# binary bit digital

我正在制作马节目。我有马脸,并希望应用一点面具。佩戴钻头面罩时,只能看到马眼。首先,我必须将马面转换为数字。为此,我有一组位,包括0,0,0和1为马的脸。

我正在使用C#并将问题分解为部分:

  1. 将马头转换为数码
  2. 为它穿上构建一个面具
  3. 把位面罩放在马上
  4. 将数字蒙面马转换回来 进入图形
  5. 在第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难的。

2 个答案:

答案 0 :(得分:3)

faceeyesOnly没有共同的1位。 maskBits会将之外的所有内容留给眼睛。交换01,或使用~运算符翻转maskBits。并给它一个更好的名称,以便明确它是什么它是bitmaskForNotEyes的掩码。

答案 1 :(得分:2)

我认为问题是 -

string binaryHead = head.Replace('#', '0').Replace('=', '0').Replace(' ', '0').Replace('O', '1');
  1. 首先,所有'#'都更改为'0'
  2. 然后,所有'='都更改为'0'
  3. 所有' '都更改为'0'
  4. 最后关注'1'
  5. 因此,转换后头部看起来像这样 -

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

    现在你正在使用& -

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

    所以输出显然是0

相关问题