Невозможно применить битовую маску

Я делаю программу для лошадей. У меня есть лицо лошади и я хочу нанести немного маски. Только глаза лошади должны быть видны, когда на них надета маска. Сначала я должен преобразовать лицо лошади в цифровую форму. Для этого у меня есть набор битов, которые включают 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-трудной.

7 голосов | спросил Weyland Yutani 4 J0000006Europe/Moscow 2014, 15:51:48

2 ответа


0

face и eyesOnly не имеют общий 1 бит maskBits оставляет все кроме для глаз. Поменяйте местами 0 и 1, или используйте оператор ~ для переключения maskBits. И дайте ему лучшее имя, чтобы было понятно, для чего это маска для: bitmaskForNotEyes.

ответил usr 4 J0000006Europe/Moscow 2014, 16:09:53
0

Я думаю, что проблема в том, -

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.

ответил brainless coder 4 J0000006Europe/Moscow 2014, 16:00:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132