OD1995
OD1995

Reputation: 1777

Tilde TRUE with isalpha() returns -2 not FALSE

Playing around with isalpha(), I have noticed some strange behaviour.

"a".isalpha()
>>True
"2".isalpha()
>> False

The two statements above, return what I would expect them to. However, now adding a tilde before, makes less sense.

~"a".isalpha()
>> -2
~"2".isalpha()
>> -1

Why does this happen? I have discovered that using not instead of ~ returns the output I was expecting, but am interested in the behaviour above.

not "a".isalpha()
>> False
not "2".isalpha()
>> True

Upvotes: 2

Views: 151

Answers (1)

glibdud
glibdud

Reputation: 7850

From the python documentation on bitwise operators (emphasis mine):

~ x: Returns the complement of x - the number you get by switching each 1 for a 0 and each 0 for a 1. This is the same as -x - 1.

Since in python True == 1 and False == 0, ~True == -1 - 1 == -2 and ~False == -0 - 1 == -1.

As you discovered, to do what you want to do (logical inverse), you need to use the not operator.

Upvotes: 5

Related Questions