今天啃遗传算法时看见了一些比较诡异的运算符操作(好吧,是当初没有好好学),稍微总结一下
&(按位与) 按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0 示例: 4&5 0000 0100 0000 0101 0000 0100 十进制结果为4 |(按位或) 按位或和&按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1 示例: 4|5 0000 0100 0000 0101 0000 0101 十进制结果为5 ^(异或) 即相同取0不同取1,运算规则为1^ 0 = 1 , 1^ 1 = 0 , 0^ 1 = 1 , 0^0 = 0 示例: 4^5 0000 0100 0000 0101 0000 0001 十进制结果为1<<
左移运算符,x<<y,即将x换成二进制左移y位 示例:
4<<1 0000 0100 0000 1000 二进制结果8>>
右移运算符,x>>y,即将x换成二进制右移y位,最高位符号与原数字一致 示例:
4>>1 0000 0100 0000 0010 二进制结果为2 -4>>1(负数的二进制表示,为正数的二进制取反+1) 4 0000 0100 -4 1111 1100 1111 1110(负数二进制转十进制,将符号为以外取反加一 000 0010=2,加上符号-就可以了) 十进制结果-2>>=
这个有点诡异,一开始真没看出来,直到想起了+=这个符号。。。x>>=y可以看成x=(x>>y),即将x>>y的值赋给x。。。
<<=
同上
(妈呀,表单居然做了防注入,符号非法,我终于知道为什么搜不到>>=,<<=这两个符号了)