# Reversing the bits of a 32-bit integer

Here is my code:

noTest=int(input())
reverse=[]
nums=[]
for i in range(noTest):
nums.append(int(input()))

for num in nums:
binary=bin(num)
binNum=binary[2:]
rev=binNum[::-1]
rev=binary[:2]+rev+'0'*(32-len(rev))
#print int(rev,2)
reverse.append(int(rev,2))

for r in reverse:
print(r)


Input:
The first line of input consists number of the test cases. Each test case
contains a single 32 bit integer.

Output:
Print the reverse of integer.

Input:00000000000000000000000000000001 =1
Output:10000000000000000000000000000000 =2147483648

• I have... to what purpose? Know bit hacks? Jan 4 '18 at 10:00
• What is the question here? Apr 21 '20 at 6:50

To expand on Caridorc's answer, you can merge bin and zfill when using str.format. Which gives a much cleaner read IMO:

int('{:032b}'.format(num)[::-1], 2)


Alternately you can use format, which would be:

int(format(num, '032b')[::-1], 2)

• int(format(num, '032b')[::-1], 2) Jan 4 '18 at 17:29

You can avoid building a list of results to print them after, you can just print them as you calculate them.

Also you assign a lot of variables and:

binNum=binary[2:]


is not explicit in removing the '0b' that Python prefixes, better is

.replace('0b','')


Also the padding with 0 logic that you write is already implemented in the zfill function, so you can avoid re-writing it yourself.

Finally, you should write a function to read the input to separate concerns and maybe reuse it in a similar problem.

Here are all my suggestions implemented.

def read_numbers(n):
return [int(input()) for _ in range(n)]

for i in read_numbers( int(input()) ):

• replace is worse since it does a search and traverses the whole string. Jan 4 '18 at 17:30