Flipping bits

Sort by

recency

|

360 Discussions

|

  • + 0 comments

    Java - How can I look at a problem and find the most simple solution? Is there a guideline on what to think about before coding. For example, logical operators first?

        public static long flippingBits(long n) {
            // Convert to binary
            long q = n;
            String binary = "";
    
            while (q > 0) {
                long remainder = q % 2;
                binary = remainder + binary;
                q = q / 2;
            }
            System.out.println("Binary of " + n + " = " + binary);
    
            // Calculate how many zeros to add at the start to get 32-bit
            int zerosToAdd = 32 - binary.length();
            String paddedBinary = "0".repeat(zerosToAdd) + binary;
            System.out.println("32-bit padded: " + paddedBinary);
    
            // Flip the bits
            StringBuilder flipped = new StringBuilder();
            for (int i = 0; i < paddedBinary.length(); i++) {
                if (paddedBinary.charAt(i) == '0') {
                    flipped.append('1');
                } else {
                    flipped.append('0');
                }
            }
    
            // Convert StringBuilder to String
            String flippedStr = flipped.toString();
    
            // Parse as base-2
            long decimal = Long.parseLong(flippedStr, 2);
    
    
            return decimal;
    
        }
    
  • + 0 comments

    C++ solution:

    long flippingBits(long n) {
        return ~static_cast<uint32_t>(n);
    }
    
  • + 0 comments

    Golang

    func flippingBits(n int64) int64 {
        return n ^ int64(0xFFFFFFFF)
    }
    
  • + 0 comments
    def flippingBits(n):
        l = format(n,'032b')
        m = []
        for i in range(len(l)):
            m.append(1-int(l[i]))
    
        sum = 0
        for i in range(len(m)):
            sum += int(m[i])*(2**(31-i))
        return sum
    
  • + 0 comments

    Definitely less elegant than other solutions, but for my fellow beginners:

    def flippingBits(n):
    
            # turn 'n' into binary string
            l=format(n, '032b')
            m=[]
    
            # flip all bits
            for i in range(len(l)):
                    m.append(1-int(l[i]))
    
            num=0
            if m[-1]==1:
                    num+=1
            for i in range(len(m)-1):
    
                    # start from the back of the string, skip m [ -1 ]
                    curr=int(m[-i-2])
                    num+=(2*curr)**(i+1)
            return(num)