~True가 -2가 되는 이유는 무엇입니까?
Python 콘솔의 경우:
~True
제공:
-2
왜죠? 누가 이진법으로 이 사건을 설명해줄 수 있나요?
int(True)
이라1
.
1
다음과 같습니다.
00000001
그리고.~1
다음과 같습니다.
11111110
어느 것이-2
투의1 보충으로
1 모든 비트를 뒤집고 결과 숫자에 1을 추가한 후 결과를 크기의 이진 표현으로 해석하고 음수 기호를 추가합니다(숫자가 1로 시작하므로).
11111110 → 00000001 → 00000010
↑ ↑
Flip Add 1
이 값은 2이지만 MSB가 1이므로 부호는 음수입니다.
언급할 가치가 있는 항목:
대해 생각하다bool
당신은 그것이 본질적으로 숫자라는 것을 알게 될 것입니다 - 그것은 두 가지 값을 가지고 있습니다,True
그리고.False
그리고 그것들은 단지 다르게 인쇄하는 정수 1과 0의 "맞춤형" 버전일 뿐입니다.정수 유형의 하위 클래스입니다.int
.
그래서 그들은 정확히 1과 0처럼 행동합니다, 그것을 제외하고는.bool
재정의합니다.str
그리고.repr
다른 방식으로 표시할 수 있습니다.
>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True
>>> True == 1
True
>>> True is 1 # they're still different objects
False
파이썬bool
type은 의 하위 클래스입니다.int
(역사적인 이유로, 부울은 Python 2.3에서만 추가되었습니다.)
부터int(True)
이라1
,~True
이라~1
이라-2
.
이유는 PEP 285를 참조하십시오.bool
의 하위 클래스입니다.int
.
부울 역수를 원했다면 다음을 사용합니다.not
:
>>> not True
False
>>> not False
True
왜 그런지 알고 싶다면,~1
이라-2
부호 있는 정수의 모든 비트를 반전시키기 때문입니다.00000001
된다1111110
부호 있는 정수에서 음수인 경우, Two의 보어를 참조:
>>> # Python 3
...
>>> import struct
>>> format(struct.pack('b', 1)[0], '08b')
'00000001'
>>> format(struct.pack('b', ~1)[0], '08b')
'11111110'
첫머리에1
비트는 값이 음수이고 나머지 비트는 양수에서 1을 뺀 역수를 인코딩한다는 의미입니다.
~True == -2
다음과 같은 경우에는 놀라운 일이 아닙니다. True
수단1
그리고. ~
비트 반전을 의미합니다...
...단, 다음과 같습니다.
True
정수로 처리할 수 있습니다.- 정수는 Two의 보어로 표시됩니다.
편집:
- 정수 표현과 비트 반전 연산자 간의 혼합을 수정했습니다.
- 다른 연마 적용(메시지가 짧을수록 작업이 더 필요함)
언급URL : https://stackoverflow.com/questions/21881362/why-does-true-result-in-2
'programing' 카테고리의 다른 글
INSERT /*+APPEND*/가 사용되는 이유는 무엇입니까? (0) | 2023.09.01 |
---|---|
업데이트를 위해 Galera 노드를 분리하는 방법은 무엇입니까? (0) | 2023.08.27 |
언더스코어.js와 jQuery는 서로 보완합니까? (0) | 2023.08.27 |
Eclipse 프로젝트의 여러 JDBC 파일 (0) | 2023.08.27 |
실행하는 PowerShell 스크립트의 디렉터리를 가져오려면 어떻게 해야 합니까? (0) | 2023.08.27 |