I am trying to debug this piece of code and learn a little. I learn that it generates 3 unique values for i
but how come the values of sum
become this much big?
If I run it and debug it, it goes something like this. It keep changes since values are chosen randomly.
i = 6
i = 26
i = 38
test_num = 274945015872
Output:
100000000000100000000000000000001000000
Why the value for test_num 274945015872
? It then uses this value to generate 39-bit
binary string. Like how?
Can someone explain?
Here is the code:
test_num = sum(1<<i for i in random.sample(range(1,40),3))
#left to right one bit shifting
print (print (f"{test_num:039b}"))
CodePudding user response:
this is how addition works ...
0b1000 8
0b0100 4
--------- -----
0b1100 12
each 1<<N
creates an integer that has a binary value with exactly 1 '1' and the rest zero
suming them sets all the one bits (a integer with 3 distinct bits set to '1') if your indexes happen to be [0,1,2] you end up with the smallest possible value of 0b111
(7) but there are 40 total position 0..39 so it would be rare to get [0,1,2] as your output
as pointed out in the comments the sum
can be replaced with
reduce(lambda x,y: x|y ,[i for i in ...])
this works because when you have a guarantee of distinct one positions NUMERIC ADDITION and BITWISE OR are identical operations