1
Valyrian 2015-11-14 23:04:48 +08:00
& | ^ << >> 这五个
不过没人拿 python 干这个,因为 python 的 int 长度不固定 |
3
imn1 2015-11-14 23:23:59 +08:00
自己看手册位运算相关说明
无符号指不区分正负,但实际上 python 取反还是会变负,也就是说有固定位长 |
4
ming2281 2015-11-15 12:00:24 +08:00
这种还是拿 C/C++之类的吧
Python 搞这个不是很好,bug 多 |
5
CRVV 2015-11-15 15:49:13 +08:00 2
@imn1 @ming2281
Python 里,~ 运算符的定义是 -(x+1) << 和 >> 运算符的定义是乘或除以 2 的若干次幂 其它 3 个 & | ^ 和有没有符号无关,正数和负数只是表示了不同的值而已 这种事情看一下文档就知道了,别随意“也就是说”,也别随意说“ bug 多” https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations |
6
ming2281 2015-11-16 11:17:33 +08:00
@CRVV 语言还是充满这歧义. 我说的是「拿 Python 做这件事会出现 bug 」,不是说「 Python 本身的 bug 多」,一个语言基础性的东西都 bug 多, 谁还会用?
举一例: 数一个数中 1 的个数 最容易想到的办法是: int countOne(const int num) { int count = 0; int flag = 1; while (flag != 0) { if ((flag & num) != 0) { count++; } flag <<= 1; } return count; } 次容易想到的是 int countOne(const int num) { int count = 0; unsigned int flag = 0x80000000; while (flag != 0) { if ((flag & num) != 0) { count++; } flag >>= 1; } return count; } 有点技巧性的 int countOne(int num) { int count = 0; while (num != 0) { count++; num = num & (num - 1); } return count; } 其中在 Python 中不能翻译最容易想到的那个, 因为往左移会无限拓展. 这就是「有的时候用 Python 搞位运算的东西会出现与自己判断不相符合的情况」,我没有说「 Python 的 bug 多」 |