[C#] Operators and Expressions - Задача 10 (и 11)


3

Не можах да намеря, тема за тази задача, (намерих само за JS Operators and Expressions 10) а исках да си сверя, задачата, която всъщност е модифицирана 5-та задача от [C#] Operators and Expressions:



10 .Write a boolean expression that returns if the bit at position p (counting from 0) in a given integer number v has value of 1. Example: v=5; p=1 --> false.
 
Ето моето решение:

using System;
 
 
namespace isBit1
{
    class ifBit
    {
        static void Main()
        {
 
 
            Console.WriteLine("Fint if the bit on a given position of a given integer is 1:\n");
 
            Console.WriteLine("Type the integer you want:\n");
            int v = int.Parse(Console.ReadLine());
 
            Console.WriteLine("Type the position of the bit you want to check:");
            int p = int.Parse(Console.ReadLine());
 
            int m = 1;
            int mask = m << p;
            int nAndMask = v & mask;
            int bit = nAndMask >> p;
 
            Console.WriteLine("\n");
 
            bool check = (bit == 1);
 
            if (check)
            {
                Console.WriteLine("It is {0} that the bit on position: \"{1}\" of the integer: \"{2}\" is 1", check, p, v);
            }
            else
            {
                Console.WriteLine("It is {0} that the bit on position: \"{1}\" of the integer: \"{2}\" is 1", check, p, v);
            }
 
 
        }
    }
}
 

 




Отговори



0

Направо тук ще сложа и задача 11, която е още по-бърза:



using System;
 
 
namespace ExtractBit
{
    class ExtractBit
    {
        static void Main()
        {
 
            Console.WriteLine("Type the integer of wich you want to extract from:");
            int integer = int.Parse(Console.ReadLine());
 
            Console.WriteLine("Type the position of the bit you want to extract:");
            int p = int.Parse(Console.ReadLine());
 
            int m = 1;
            int mask = m << p;
            int nAndMask = integer & mask;
            int bit = nAndMask >> p;
 
            Console.WriteLine("\n");
 
            Console.WriteLine("The bit on position: {0} of integer: {1} has a value of: {2}. Enjoy this valuable information!", p, integer,bit);
 
        }
 
    }
}
 

от jahmmin (766 точки)


1
Това е моето решение: http://pastebin.com/JXqaMxrh

от dani.georgieva (3072 точки)


0
само не разбирам защо след като приложите И на числото и маската мърдате битовете надясно и сравнявате с едно?
по-логично (за мен) е да го сравните направо с различно от 0 (numAndMask != 0)

от no_response (155 точки)

0
Интересно, не бях се сетила. Мерси!

от dani.georgieva (3072 точки)


0

Аз също не можах да я намеря и я обърках с JS (но те си приличат и по условие :-))

Това е моето решение:


http://pastebin.com/LzyLM4C4


от ellapt (6303 точки)


0

Здравей, @Мариан Радев!

Погледнах твоето решение на 10 задача и освен че е вярно, много ми хареса разпечатката на резултата. Можеш дори да си спестиш if....else накрая и да оставиш само една разпечатка:

Console.WriteLine("It is {0} that the bit on position: \"{1}\" of the integer: \"{2}\" is 1", check, p, v);

Тя ще варира в зависимост от стойността на check.

\n е излишно в Console.WriteLine(.....), защото и без това се отива на нов ред. Освен ако не искаш да бъдат два.

Поздрав и успех!


от ellapt (6303 точки)


1

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _10.BitValue1
{
    class BitValue1
    {
        static void Main(string[] args)
        {
            int n = 5;
            int p = 1;
            int mask = 1 << p;
            int nAndMask = n & mask;
            int bit = nAndMask >> p;
            bool check = false;
            if (bit==1)
            {
                check = true;
                Console.WriteLine(check);
            }
            else
            {
                check = false;
                Console.WriteLine(check);
            }
        }
    }
}
 

от bankina (268 точки)


1

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _11.ExtractingBitValue
{
    class ExtractingBitValue
    {
        static void Main(string[] args)
        {
            int i = 5;
            int b = 2;
            int mask = 1 << b;
            int iAndMask = i & mask;
            int ValueBit = iAndMask >> b;
            Console.WriteLine(ValueBit);
        }
    }
}
 

от bankina (268 точки)


0
Моите решения на двете задачи, да има за архива :)
http://pastebin.com/TSuzpUfn
http://pastebin.com/TZhfmCDD

от iordan_93 (867 точки)


0
Моето решение:
 
            int n = 35; // 00100011 
            int p = 6;
            int i = 1; // 00000001 
            int mask = i << p; // Move the 1st bit left by p positions 
 
            // If i & mask are positive then the p-th bit of n is 1 
            Console.WriteLine((n & mask) != 0 ? 1 + " - true" : 0 + " - false");  
 
           //Comparing n & mask; ((If the result != 0, Then the 6-th bit = 1),
           (If result = 0, Then the 6-th bit = 0)).
       

от Kaloyanmm (63 точки)


1

Ето още един интересен вариант. Търсеният бит се измества в началото и се прави проверка дали числото е четно или нечетно - дали завършва на 0 или 1. :)

http://pastebin.com/G99UTJ52


от valentin_lozev (1012 точки)


0
Интересно и хитро решение :-) Поздравления!

от ellapt (6303 точки)


0

Ето и моите решения:
Задача  10:using System;

class TakeBit
{
    static void Main()
    {
        int i = int.Parse(Console.ReadLine());
        int b = int.Parse(Console.ReadLine());
 
        int result = i & (1 << b);
 
        Console.WriteLine(result == 0? "0": "1");
    }
}
 
задача 11
using System;
class ReplaceBit
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        int p = int.Parse(Console.ReadLine());
        int v = int.Parse(Console.ReadLine());
 
        int result;
        if(v == 0)
        {
            result = n & (255 ^(1 << p));
        }
        else
        {
            result = n | (1 << p);
        }
        Console.WriteLine(result);
        
    }
}
 

 


от emrah.bekir (85 точки)


0
Колега, качвай си кода в този сайт: http://pastebin.com/. Копираш го кода, пействаш го в сайта, избираш C# на Syntax Highlighting (ако кодът се отнася за C#) и копираш линка.

от teleriknetwork (2734 точки)