2016-02-13 81 views
0

我看到這段代碼here,我想知道下面的代碼是如何工作的。我理解邏輯,但只是想知道如何使用好位邏輯的實現。它是如何得到相同的前綴和後綴?

我修改了代碼,使其爲4位。我想知道如何檢測普通前綴,即在下面的情況5中?第12行和第13行的數學推理是什麼?

 1  import random 
     2  #suppose the range of number is 8 bits 
     3  #and we are working with 4bits prefix 
     4  #and 4bits suffix 
     5  data = [] 
     6  bits = 4 
     7  for i in range(100000): 
     8   data.append(random.randint(0, 100)) 
     9  suffix = 5 
     10 for i in data: 
     11    i = int(i) 
     12    s = i^(suffix<<bits) 
     13    if s < (1 << bits): 
     14      print("s is ", s, "prefix of", i, "is", s, "and suffix is ", suffix) 

回答

1
bits == 4 
prefix == 5 == 00000101 
prefix << bits == 01010000 
suffix = i XOR 01010000 
    => e.g. if i == 0101xxxx => suffix == 0000xxxx (correct prefix) 
    => e.g. if i == 1110xxxx => suffix == 1011xxxx (wrong prefix) 
1 << bits == 00010000 
if (suffix < 00010000) ~ if (suffix is like 0000xxxx) ~ if (i is like 0101xxxx) 

所以每個隨機數是XOR與前綴;然後使用它來檢查哪些數字具有正確的前綴(如果4個第一位現在是0000)並獲得後綴(最後4位)。

+0

只是想知道你是如何得到這麼快?我花了很多時間弄清楚了。一旦你回答了這個問題,我會標記它是正確的。哦,現在我明白我正在使用^作爲不是異或者的力量。 –

+0

@nomanpouigt是的,你鏈接的頁面有點令人困惑,因爲解釋使用^來表示權力,但代碼使用它來表示異或。這是一個常見的混淆之處,因爲它在不同的語言中有不同的用法。 – m69