Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

vmkoleva avatar vmkoleva 12 Точки

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

 

0
08/06/2015 18:11:06
Manoela avatar Manoela 7 Точки

пробах твоя код с 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);

 

 

0
vmkoleva avatar vmkoleva 12 Точки

Благодаря много, че помогна :) 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.