import sys
import time
val10 = 0b1100011011000110110001101100011110001101100011011000110110001101
niter = 100000
[ドキュメント]
def bit_reverse(val):
ret = 0
while 1:
v0 = val & 0b001
ret = ret | v0
val = val >> 1
if val == 0:
break
else:
ret = ret << 1
return ret
[ドキュメント]
def bit_reverse_nobitop(val):
ret = 0
while 1:
v0 = val % 2
ret = ret + v0
val = val // 2
if val == 0:
break
else:
ret = ret * 2
return ret
[ドキュメント]
def bit_reverse_nobitop2(val):
ret = 0
while 1:
v0 = val % 2
ret += v0
val //= 2
if val == 0:
break
else:
ret *= 2
return ret
[ドキュメント]
def main():
global val10, niter
if len(sys.argv) > 1:
val10 = int(sys.argv[1], 2)
if len(sys.argv) > 2:
niter = int(sys.argv[2])
print("")
print("Base 10 input: ", val10)
print("Base 2: {:b}".format(val10))
print("")
print("by bitwise operation")
vrev = bit_reverse(val10)
print("reversed in Base 10 =", vrev)
print(" in Base 2 = {:b}".format(vrev))
print("without bitwise operation")
vrev = bit_reverse_nobitop(val10)
print("reversed in Base 10 =", vrev)
print(" in Base 2 = {:b}".format(vrev))
print("")
print("Time for {} iterations".format(niter))
st = time.time()
for _ in range(niter):
bit_reverse(val10)
et = time.time()
print("by bitwise operation : {} s".format(et - st))
st = time.time()
[bit_reverse(val10) for _ in range(niter)]
et = time.time()
print("by bitwise operation (list incl): {} s".format(et - st))
st = time.time()
for _ in range(niter):
bit_reverse_nobitop(val10)
et = time.time()
print("without bitwise operation: {} s".format(et - st))
st = time.time()
for _ in range(niter):
bit_reverse_nobitop2(val10)
et = time.time()
print("without bitwise operation #2: {} s".format(et - st))
print("")
if __name__ == "__main__":
main()