答疑课
aa = [(2*(x/2)>>0,2*(x%2)) for x inxrange(4)] ##这里不明白
print [((x>>1)<<1,(x &1)<<1) for x in xrange(4)] ##这里不明白
一.先得讲讲二进制。
bin(3)
二.难缠符号来啦。
1.难缠符号之一
不会算的可以先用bin()先变成二进制码在做运算。
>>(右位移) << (左位移)移动的是二进制码
左移低位补0 右移低位消失
2.难缠符号之二
& 按位与 右对齐高阶不够补0 只有同时为1时才为1 其他都为0
3.难缠符号之三 |
按位或 右对齐高阶不够补0 只有有一个为1则为1
4.难缠符号之四 ^
按位异或 当且仅当只有一个表达式的某位上为 1 时,结果的该位才为 1。否则结果的该位为 0 与或的区别是或如果两个都为1则为1 但是异或两个为1则为0
5.难缠符号之五
按位取反 对变量 中全部二进制位取反
三.其他
1.&之奇偶判定 按位与1
奇数与1相与为1
2.计算硬盘容量 右位移10
四.回过头来再看这道题
print [((x>>1)<<1,(x &1)<<1) for x in range(4)]
输出为[(0, 0), (0, 2),(2, 0), (2, 2)]