Problem 12.Extract Bit from Integer HomeWork 3
Ето и малко помощ от мен относно тази задача.
http://pastebin.com/JAyW42vJ
Ако някой има друго рещение да сподели :)
Ето и малко помощ от мен относно тази задача.
http://pastebin.com/JAyW42vJ
Ако някой има друго рещение да сподели :)
Problem 9.Bit Destroyer (Write a program that sets the bit at position p to 0. Print the resulting number.)
Задачата е от упражнението, не от домашната. Изчетох всички разяснения, които сте писали и схванах как горе долу работят побитовите оператори. Въпроса ми тук е, че не мога да открия грешката си в задачата (или може би няма такава), а има грешка в примерните отговори, дадени в задачата, добавих ги след решението. 111 ми се получава отговора, но останалите - не. Помъчих се доста време, но не успях да се справя. Така че ако може малко помощ.
class BitDestroyer
{
static void Main(string[] args)
{
Console.WriteLine("Write a number n:");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Write a position p:");
int p = int.Parse(Console.ReadLine());
long result = long.Parse(Convert.ToString(n, 2));
long mask = n << p;
long invertmask = ~mask;
long newNumber = n & mask;
Console.WriteLine(newNumber);
}
}
n - p - Result
1313 - 5 - 1281
231 - 2 - 227
111 - 6 - 47
пробах твоя код с 111 и ми даде отговор 64.
Маската трябва да е единица, преместена на позицията на търсения бит.
Така както си го написал събираш n с преместен n.
за да сработи, трябва да си направиш маска от 1, преместена на нужната позиция. После си правиш тилда от маската, за да остане 0 под нужния бит и 1 под всички останали. И &. Така само където е било 1 в оригиналтото число, при & 0 дава 0, тоест the bit is destroyed. Всички други битове при & с 1ците на маската не се променят.
Не знам дали обеснението ми е ясно, дано помогнах.
Моето решение е това:
int n = int.Parse(Console.ReadLine());
int p = int.Parse(Console.ReadLine());
int mask = ~(1 << p);
int result = n & mask;
Console.WriteLine(result);
Благодаря много, че помогна :)