2014-03-06 3 views
0

이 정의는 주어진 음수 시각화 N -n이다 -파이썬 반전 연산자 - ~ 간단한 즉

말 짝수 예 1 ~

1 = 0001 
~1 = 1110 (which is -2) 

1.

2 ~

2 = 0010 
~2 = 1101 (which is the representation of -3 in twos complement) 

하지만 문제는

0123입니다
1110 = -2 can be easily visualized as -2 (the right two bits are 10 and the rest all 1) 
1101 = -3 can't be visualized like this (going by the above logic it should be -5) 

그래서 나는 2 진수 보충에서 2 진수를 보면서 음수가 많은 계산을하지 않고도 표현하는 간단한 방법이 있는지 궁금합니다.

+0

'1110 = -2'와'1101 = -3'을 의미합니까? – user2357112

+0

오른쪽. 1110 (-2 in two complement), 1101 (-3 in two complement) – sysuser

+0

'~'과'-'가 섞였습니다. – user2357112

답변

3

~n = -n - 1-n = ~n + 1과 같습니다. 즉, 숫자의 음수가 무엇인지 알아 내려면 (머리에) 반전하여 추가 할 수 있습니다. 척하는 척도는 척도이고 척도는 척도입니다.

예 :이

1101 

후 1

0011 

따라서, 1101-3를 나타내는 추가

0010 

척.

0

이 정의는 정수의 2의 보수 표현으로 인해 발생합니다. "정말"~n은 모든 비트가 뒤집힌 n입니다. 그러나 "모든"비트를 뒤집어 쓴 결과는 처음에 얼마나 많은 비트가 n에 있는지에 달려 있습니다. CPython은 내부적으로 고정 너비의 정수를 사용하지만 프로그래머에게는 언어가 표시하지 않으므로 의 의미를 갖는 유일한 정의는 ~n = -n - 1 인 산술 코드입니다. 그러나 그 정의에 대한 동기는 고정 너비 2의 보수 정수 비트를 뒤집는 것입니다.

...1110하지 ~2 같이 -2

는 1,110 ~ 2 = 쉽게 시각화 할 수 있고, 그것은 -2이다. ~22...010이기 때문에 ...1101입니다.

1101

는 = ~ 3이

...1101처럼 시각화 할 수 없습니다 ~3가 아닌, 그것은 -3입니다. ~33...011이기 때문에 ...1100입니다.

내가 이것을 시각화하는 방식 (특정 숫자를 고려하지 않는 것을 선호하는 수학자로서)은 2의 보수로 ...10...이 항상 2의 거듭 제곱 인 것을 알아야합니다.그래서 ...10 그런 다음 예를 ...110110을 위해, 그것은 ...110000 + 110을 무엇을 알기 위해 등

, ...100가 -4, -2, 즉 -10입니다 -16 + 6을, 말을하는 것입니다. 물론 ...110110

그 수식 의해서도 -10-9-1~9을 말하자면, ~1001 (비트 젖혀)도이다. 그래서 시스템이 작동합니다 ;-)