using System;
class RemoveBitAndShiftProgram
{
/*
removeBitAndShift(number, position)
-----------------------------------
Removes the bit at the given position and shifts all higher bits right.
Example:
number = 22 (10110)
position = 2 (0 = LSB)
Bits: 1 0 1 1 0
^ remove this bit
left = bits above removed bit
right = bits below removed bit
result = (left << position) | right
*/
static int RemoveBitAndShift(int number, int position)
{
int left = number >> (position + 1); // bits above removed bit
int right = number & ((1 << position) - 1); // bits below removed bit
return (left << position) | right; // merge shifted left + right
}
/*
printBinary(value)
------------------
Idiomatic C# binary printing:
Convert.ToString(value, 2) → binary string
PadLeft(32, '0') → pad to 32 bits
Insert spaces every 4 bits for readability
*/
static void PrintBinary(int value)
{
string binary = Convert.ToString(value, 2).PadLeft(32, '0');
for (int i = 0; i < binary.Length; i++) {
Console.Write(binary[i]);
if ((i + 1) % 4 == 0)
Console.Write(" ");
}
}
static void Main()
{
int number = 22;
int position = 2; // remove bit 2 (0 = LSB)
Console.WriteLine("Original number in binary:");
PrintBinary(number);
int result = RemoveBitAndShift(number, position);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine($"Number after removing bit {position} and shifting remaining bits:");
PrintBinary(result);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Result as integer: " + result);
}
}
/*
run:
Original number in binary:
0000 0000 0000 0000 0000 0000 0001 0110
Number after removing bit 2 and shifting remaining bits:
0000 0000 0000 0000 0000 0000 0000 1010
Result as integer: 10
*/