2017-05-18 1 views
1

필자는 (다소) 보완에 익숙하지만 파이썬 2.7과 관련하여 재교육을 사용할 수 있습니다.~ 0b1이 파이썬 2.7에서 -2를 출력하는 이유는 무엇입니까?

~0b1-2으로 인쇄됩니까?

나는 1의 보수가 1을 0으로 변환하고 그 반대도 마찬가지라는 것을 알고 있습니다. 에 0b0 또는 0을 인쇄 할 것으로 예상됩니다.

print은 자동으로 바이트 리터럴을 int의 형식으로 변환합니까?

도움을 주시면 감사하겠습니다.

+3

* 리터럴 *이 아닙니다. 그것은 다른 타입의'int' 리터럴입니다. 여러분은'int'를 바이너리로 표현할 것입니다. * 항상 int *이므로 전환이 없습니다. –

+0

@ juanpa.arrivillaga 의견을 주셔서 감사합니다. 그건 좀 설명해. – MSD

+0

즉, '0b10000','0x10' 및 '16'은 동일한'int '객체에 대한 모든 리터럴입니다. 기본적으로'int'가 화면에 출력 될 때 십진수 표현이 출력됩니다. –

답변

1

0b10b0000...01 (정수 1)을 쓰는 또 다른 방법입니다. ~하면 1 -> 00 -> 1 (부호 비트 포함) 비트 단위 보수를 얻을 수 있습니다 그래서 당신은 얻을 : -2입니다

0b111....10 

합니다.

+0

당신의 대답은,이 질문 (http://stackoverflow.com/questions/8305199/the-tilde-operator-in-python)의 가장 중요한 답변과 결합되어 무슨 일이 일어 났는지 이해할 수있었습니다. 감사합니다. – MSD

관련 문제