首先想到是不是把and
和 &
的用混了,可是查到一个解释说:
and
tests whether both expressions are logically True
while &
(when used with True
/False
values) tests if both are True
.
但是110<122
和110>97
明明都是True啊
而且为什么把第一个110换成100就是正常的。
我觉得是不是我的Python有问题……
1
imlonghao 2015-02-09 06:24:55 +08:00 via Android 1
运算的顺序可能并不是我们所认为的
先比较两边,然后再比较中间 >>> 110<122 & 110>97 False >>> (110<122) & (110>97) True |
2
Valyrian 2015-02-09 06:26:44 +08:00 2
& = bitwise and, like '&' in C
and = logical and, like '&&' in C |
3
imlonghao 2015-02-09 06:36:12 +08:00 via Android 1
and is a logical operator which is used to compare two values, IE:
> 2 > 1 and 2 > 3 True & is a bitwise operator that is used to perform a bitwise AND operation: > 255 & 1 1 http://stackoverflow.com/questions/16696065/is-there-a-difference-between-and-and-with-respect-to-python-sets/16696134#16696134 |
4
liubiantao 2015-02-09 06:39:31 +08:00 2
没学过 Python ,我刚才查了一下文档,又试验了一下,猜测如下。
& 是按位与的意思。 >>> 122 & 110 106 所以 100<122 & 110>97 相当于 100<106>97,显然是 True 而 110<122 & 110>97 相当于 110<106>97,显然是 False >>> (110<122) & (110>97) True 加上括号为什么对呢,引用你查到的解释。 and tests whether both expressions are logically True while & (when used with True/False values) tests if both are True. 注意while & (when used with True/False values),也就是说只有当两边都是布尔值的时候,& 才起到 and 的作用,否则 & 优先是按位与的意思。 不准确之处欢迎之处。 |
5
yyfearth 2015-02-09 06:50:24 +08:00 1
一般来说都是位运算的优先级比较高
|
6
laoyuan 2015-02-09 07:36:22 +08:00 1
用 && 就没这事了,&& == and
|
7
Tink 2015-02-09 07:38:04 +08:00 via iPhone 1
带括号,一般为了防止运算顺序错误都会习惯性带括号
|
8
cassyfar 2015-02-09 08:00:48 +08:00 1
一个是logic operation 一个是bit operation
|
9
Delbert 2015-02-09 08:12:41 +08:00 1
@liubiantao “所以 100<122 & 110>97 相当于 100<106>97,显然是 True
而 110<122 & 110>97 相当于 110<106>97,显然是 False”…… 写错了吧? |
10
lebowskis 2015-02-09 09:21:48 +08:00 1
楼主犯了两个错误,一个是对符号理解的错误,&不等同于and,&是按位与的意思,其次,&的优先级比<>高,所以你用&之后的表达式是:110 < (122 & 110) > 97
110 = 0x6e = 0b01101110 122 = 0x70 = 0b01111010 97 = 0x61 = 0b01100001 (122 & 110) = 0b01101010 = 0x6a = 106 即是你的表达式等价于 110<106>97,明显为False 而100<122 & 110>97等价于 100 <106 >97,明显为True 你的python没任何问题。 |
11
Osake 2015-02-09 09:30:09 +08:00 1
乡亲们回答的好 赞一个
|
12
linuxzpf 2015-02-09 09:35:59 +08:00 1
LZ要区分一下 “按位与”和“逻辑与”是不一样的哦。
|
13
heaton_nobu 2015-02-09 09:45:51 +08:00 1
&&
|
14
hfli 2015-02-09 10:09:56 +08:00 1
楼主其实不是把and和&搞混了,而是把"&"和"&&"搞混了 :-)
|