Imports System
Imports System.Text.RegularExpressions
Module Program
'
' removeBitsAndShift(number, positions)
' -------------------------------------
' Removes multiple bit positions from a number and shifts the remaining bits
' right to fill the gaps.
'
' Important:
' Bits must be removed from highest → lowest position.
' Otherwise earlier removals shift the positions of later ones.
'
Function RemoveBitsAndShift(number As Integer, positions() As Integer) As Integer
' Copy and sort positions descending
Dim sorted = CType(positions.Clone(), Integer())
Array.Sort(sorted)
Array.Reverse(sorted)
Dim result As Integer = number
For Each pos In sorted
Dim leftPart As Integer = result >> (pos + 1) ' bits above removed bit
Dim rightPart As Integer = result And ((1 << pos) - 1) ' bits below removed bit
result = (leftPart << pos) Or rightPart ' merge
Next
Return result
End Function
'
' printBinary(n)
' --------------
' Prints a 32-bit binary representation of an integer.
'
Sub PrintBinary(n As Integer)
Dim binary As String = Convert.ToString(n, 2).PadLeft(32, "0"c)
' Group into 4-bit chunks
binary = Regex.Replace(binary, "(.{4})", "$1 ")
Console.WriteLine(binary)
End Sub
Sub Main()
Dim number As Integer = 1234 ' 0000 0000 0000 0000 0000 0100 1101 0010
Dim positions() As Integer = {1, 3, 7} ' remove bits 1, 3, 7 (0 = LSB)
Console.WriteLine("Original number in binary:")
PrintBinary(number)
Dim result As Integer = RemoveBitsAndShift(number, positions)
Console.WriteLine()
Console.WriteLine("Number after removing bits {1, 3, 7} and shifting remaining bits:")
PrintBinary(result)
Console.WriteLine()
Console.WriteLine("Result as integer: " & result)
End Sub
End Module
'
' run:
'
' Original number in binary:
' 0000 0000 0000 0000 0000 0100 1101 0010
'
' Number after removing bits {1, 3, 7} and shifting remaining bits:
' 0000 0000 0000 0000 0000 0000 1001 0100
'
' Result as integer: 148
'