Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

39,954 questions

51,896 answers

573 users

How to clear bits in the given range in Kotlin

1 Answer

0 votes
// Print bits of a 32-bit integer
fun printBits(x: UInt, label: String) {
    // Convert to binary and pad to 32 bits
    val bits = x.toString(2).padStart(32, '0')
    println("$label: $bits")
}

// Clear bits in range [l, r] inclusive (0 = least significant bit)
fun clearBits(x: UInt, l: Int, r: Int): UInt {
    if (l < 0 || r > 31 || l > r) {
        throw IllegalArgumentException("Invalid bit range")
    }

    // maskLeft:
    // Create a mask with 1s above bit r and 0s from bit r down to 0.
    // Example: r = 5 → maskLeft = 11111111 11111111 11111111 11000000
    val maskLeft: UInt = (UInt.MAX_VALUE shl (r + 1))
    printBits(maskLeft, "maskLeft ")

    // maskRight:
    // Create a mask with 1s below bit l and 0s from bit l upward.
    // Example: l = 3 → maskRight = 00000000 00000000 00000000 00000111
    val maskRight: UInt = ((1u shl l) - 1u)
    printBits(maskRight, "maskRight")

    // Combine both masks:
    // maskLeft keeps bits above r.
    // maskRight keeps bits below l.
    // The range [l, r] becomes 0s.
    val mask: UInt = maskLeft or maskRight
    printBits(mask, "mask     ")

    return x and mask
}

fun main() {
    val value: UInt = 0b11111100111111001111110011111100u

    val l = 3   // start bit
    val r = 10  // end bit

    val result = clearBits(value, l, r)

    printBits(value,  "Before   ")
    printBits(result, "After    ")
}




/*
run:

maskLeft : 11111111111111111111100000000000
maskRight: 00000000000000000000000000000111
mask     : 11111111111111111111100000000111
Before   : 11111100111111001111110011111100
After    : 11111100111111001111100000000100

*/

 



answered Dec 30, 2025 by avibootz
...