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

Semrush - keyword research tool

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth
Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

42,641 questions

55,376 answers

573 users

How to reverse the bits of a number in Swift

1 Answer

0 votes
import Foundation

func reverseBits(_ n: UInt32) -> UInt32 {
    let bin = String(n, radix: 2).leftPadding(toLength: 32, withPad: "0")
    let rev = String(bin.reversed())
    
    return UInt32(rev, radix: 2)!
}

func bits(_ n: UInt32) -> String {
    let bin = String(n, radix: 2).leftPadding(toLength: 32, withPad: "0")
    
    return stride(from: 0, to: 32, by: 8)
        .map { i in
            let start = bin.index(bin.startIndex, offsetBy: i)
            let end   = bin.index(start, offsetBy: 8)
            return String(bin[start..<end])
        }
        .joined(separator: " ")
}

extension String {
    func leftPadding(toLength: Int, withPad: String) -> String {
        if self.count >= toLength { return self }
        return String(repeating: withPad, count: toLength - self.count) + self
    }
}

let a: UInt32 = 19
let b: UInt32 = 3

let ra = reverseBits(a)
let rb = reverseBits(b)

print("Original 19: \(bits(a))")
print("Reversed 19: \(bits(ra))")
print()
print("Original 3:  \(bits(b))")
print("Reversed 3:  \(bits(rb))")


/*
run:

Original 19: 00000000 00000000 00000000 00010011
Reversed 19: 11001000 00000000 00000000 00000000

Original 3:  00000000 00000000 00000000 00000011
Reversed 3:  11000000 00000000 00000000 00000000

*/

 



answered Apr 4 by avibootz
...