Problem 14.Modify a Bit at Given Position
Здравейте!
Може ли малко помощ за задачата. При въвеждане на 1 се получава верен отговор, но при 0 не съвпада с това от домашното.
Console.WriteLine("Type your number:");
int number = int.Parse(Console.ReadLine());
Console.WriteLine("Type the position:");
int position = int.Parse(Console.ReadLine());
Console.WriteLine("Type your value 1 or 0:");
int value = int.Parse(Console.ReadLine());
if (value == 1)
{
value = 1 << position | number;
Console.WriteLine("{0}", value);
}
else
{
value = 0 << position | number;
Console.WriteLine("{0}", value);
}
ModEdit: Моля прочети правилата на форума в частта им за именуване на темите.
Благодаря! Малко ми е сложно да разбера това с маската.
Единственият начин да смениш бит от 1 на 0, е да го сравниш със 0 и оператора &. Eто как работят трите логически оператора:
1 & 0 = 0;
1 | 0 = 1;
1 ^ 0 = 1;
T.е. в едно число, за да сменим бит на дадена позиция от 1 на 0, ние трябва да го сравним с маска, която на съответната позиция има 0. Може директно да сравним с числото 0 (0000 0000), но така ще нулираме абсолютно всички единици. За да запазим битовете, които не трябва да пипаме, правим всички битове в маската на единици, освен този, който ще променяме. Примерно 1011 1111 - нулира бит на позиция 6. 1011 1101 - ще нулира битове на позиция 6 и 1.
Благодаря, разбрах.