[C#1] Домашно - Operators and Expressions - 12. N-th Bit


-1

Здравейте!

От 30 минути си блъскам главата с тази задача.

Условието е тук:

https://github.com/TelerikAcademy/CSharp-Part-1/tree/master/Topics/03.%20Operators-and-Expressions/homework/12.%20N-th%20bit

И по някаква причина ми дава 87 от 100 точки ако може да ми помогнете като ми кажете къде ми е грешката.

Ето го кода:

using System; namespace ConsoleApplication12 { class Program { static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); int p = int.Parse(Console.ReadLine()); for (int i = 0; i < p; i++){ n = n >> 1; } string binary = Convert.ToString(n, 2);Console.WriteLine(binary[binary.Length-1]);//prinths the bit at p index } } }

Благодаря предварително :)




Отговори



1

Най-лесното което можеш да направиш е int nValue = (p>>n)&1; Това ти запазва единствено стойността на n-th бит.

p>>n измества N-th бит на 0-лева позиция. & 1 служи за изчистване на останалите битове. Т.е. резултата да е само 0 или 1.

 В общи линии това е цялото ти решение :)




0

Благодаря проработи :) 

Но само може ли да ми кажеш защо другото ми решение не работи ?


от Merhatt (1406 точки)


0
По някаква причина кода ми се прецаква затова ето и линк към pastebin: http://pastebin.com/Vb2yj1FJ

от Merhatt (1406 точки)


2

Моля, прочетете правилата на форума и ги спазвайте . (променете си заглавието на темата) :) 

https://telerikacademy.com/Forum/Questions/1870/%D0%A4%D0%BE%D1%80%D1%83%D0%BC-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0


от paveld3 (17458 точки)


0
Благодаря !

от Merhatt (1406 точки)


1

Нямаш нужда от for loop, за да преместиш бит от позиция P на нулева позиция. Можеш просто да напишеш n >> p.

Силно ти препоръчвам да използваш само побитови операции за тази задача. След като си решиш задачата с побитови операции, пробвай и с вградената функционалност.


от kon.simeonov (5238 точки)


0

Здравейте и аз има същия проблем (87/100). Това е моят код ако някой може да ми каже къде съм го оплескал.

using System;

namespace program
{
    class Program
    {
        static void Main()
        {
            int p = int.Parse(Console.ReadLine());
            int n = int.Parse(Console.ReadLine());
            int bit = p >> n & 1;
            Console.WriteLine(bit);
        }
    }
}


от kiko0o7 (472 точки)


0
Промени int p на long p. Така дава 100/100.

от krasimir_13 (15 точки)

0

Колега, и аз съм със същия проблем, но когато го променя така както казваш не ми дава. Казва, че не мога да ползвам << оператора с long, някаква друга идея ?

/////////////////////////////

Ох, оправих се... ето така го написах аз:

// NthBith using System; class NthBit { static void Main(string[] args) { long P = long.Parse(Console.ReadLine()); int N = int.Parse(Console.ReadLine()); long moveNumberN = P >> N; long bit = moveNumberN & 1; Console.WriteLine(Convert.ToString(bit, 2)); } }

от Sv3tki6 (55 точки)