答疑课
aa = [(2*(x/2)>>0,2*(x%2)) for x in xrange(4)] ##这里不明白
print [((x>>1)<<1,(x & 1)<<1) for x in xrange(4)] ##这里不明白
一.先得讲讲二进制。
0 + 1 + 1 9 +1 = 10
99 +1 = 100
0 +1 = 1
1 +1 = 10
10 +1 = 11
11 +1 = 100
100 + 1 = 101
101 + 1 = 110
二.难缠符号来啦。
bin方法:python的内置方法,将十进制的数字转换成二进值对应的字符串
0b打头代表二进制
1.难缠符号之一 >> <<
位移: 右位移、左位移 移的是二进制位
计算公式:左位移乘2的n次方,右位移除2的n次方,小数舍弃
2.难缠符号之二 &
按位与
首先靠右对齐(左侧用0补齐),再逐位与
3.难缠符号之三 |
按位或
首先靠右对齐(左侧用0补齐),再逐位或
4.难缠符号之四 ^
按位异或
一个为真一个为假的时候为真
5.难缠符号之五~
按位取反
现在计算机普遍使用补码表示负数。知道一个数的补码,要求其值的方法是:首先看符号位也就是最左的一位,如果是1代表是负数(-)如果是0代码是正数(+),然后对该值取反再+1,得到其源码。
假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下:
5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101
执行~运算,即~5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6
三.其他
1.&之奇偶判定
1)对2取余,0为偶数,1为奇数
2)与1按位与,0为偶数,1为奇数 本质是看数字的二进制码最后一位是0还是1
2.计算硬盘容量
字节数右位移10位,相当于除1024
这些符号的用处:帮助进行逻辑判断
按位与和普通的与相同:
条件语句中使用:
四.回过头来再看这道题
aa = [(2*(x/2)>>0,2*(x%2)) for x in xrange(4)] ##这里不明白
这里的/除号,在python2中是取整;在python3中会转成float型。位移操作与乘除操作先后顺序一样。
print [((x>>1)<<1,(x & 1)<<1) for x in xrange(4)] ##这里不明白