最近業餘研究遺傳演算法,交叉演算法採取隨機多點交叉,也就是把兩個數的二進位制位隨機交換,**如下:
__corsser_mask = (
0xfffffffe,0xfffffffd,0xfffffffb,0xfffffff7,
0xffffffef,0xffffffdf,0xffffffbf,0xffffff7f,
0xfffffeff,0xfffffdff,0xfffffbff,0xfffff7ff,
0xffffefff,0xffffdfff,0xffffbfff,0xffff7fff,
0xfffeffff,0xfffdffff,0xfffbffff,0xfff7ffff,
0xffefffff,0xffdfffff,0xffbfffff,0xff7fffff,
0xfeffffff,0xfdffffff,0xfbffffff,0xf7ffffff,
0xefffffff,0xdfffffff,0xbfffffff,0x7fffffff,
)def binarry_crossover(val1,val2,max_bit=16):
"""隨機抽取一些位置,隨機交換兩個數的二進位制位,最大交換數目max_bit
"""t = val1^val2
for i in range(max_bit):
t &= __corsser_mask[random.randint(0,31)]
return val1^t,val2^t
二進位制位交換 反轉 計數
如何交換乙個整形數的二進位制表示的其中兩位.比如要把a,與b進行交換。那麼方法如下 x表示任意值。x x x xaxx x xxbx x x 分為兩步 第一步 首先要求得 x x x x0xx x xx0x x x 第二步 在第一步的基礎上加上 0000 0000 0000 0b00 0000 00...
二進位制位運算
與運算,6 3 2 或運算 6 3 7 異或運算 6 3 5 反碼 6 7 左移 3 2 12 3 2 2 12 右移 3 1 1 3 2 1 無符號右移 3 1 1 3 2 1 按位與,當兩位同時為1時才為1如 1 1 1 1 0 0 0 1 0 6 3相當於 0110 0011 0010 2 按...
更新二進位制位
問題描述 給出兩個32位的整數n和m,以及兩個二進位制位的位置i和j。寫乙個方法來使得n中的第i到j位等於m m會是n中從第i為開始到第j位的子串 日期 2017 8 22 思路 由於題目的提示中已經給出,i到j有足夠的空間放置m,將n中的第i到j之間的數字全部置為0,最後與m異或即可 includ...