2012-01-09 1 views

답변

8

2의 보수 정수에 모든 비트를 설정하면 -1이됩니다.

나에게 (아주 작은)이 비트 정수 2의 보수 사용하여 서명으로 설명하자 : -2 1에서 오버 플로우 과거,

00 → 0 
01 → 1 
10 → −2 
11 → −1 

이 그냥 0에서 카운트 업되어 및에서 끝나는 -1 . 보시다시피, 0을 얻는 모든 비트를 지우면 모두 설정하면 -1이됩니다 (정수의 넓이에 관계없이).

+1

"BASIC을 사용하는 사람들"나는 공식적으로 기억하기에는 너무 젊다. – BoltClock

+1

적어도 Visual Basic 6이 될 때까지이 방법은 올바르게 기억합니다. VB.NET은 불리언 타입뿐만 아니라'AndAlso'와'OrElse'를 단락시켰다. – Joey

5

제로 실제로 그건

(즉 진정한는 제외 부울 연산자와 가지, 비트 연산자와 마찬가지로 잘 작동하지 -1 대신 1의 거기로 마음 당신은 BASIC을 사용하는 사람들은 이미 알고 있었다) PHP 정수 유형은 32 비트 부호있는 정수 아닌 단일 비트만큼 32 제로 비트에 의해 표현되고 :
0000 0000 0000 0000 0000 0000 0000 0000 

그래서 아닌로 (-1 two's complement 결과 그들 모든를 뒤집 비트

기호를 나타내는 가장 왼쪽의 하나) :

1111 1111 1111 1111 1111 1111 1111 1111 
+4

왜 모든 비트가 -1인지 알 수 없다면 스스로에게 물어보십시오 : 1을 더하면 어떻게됩니까? 답변 : 오버 플로우가 발생하고 모든 비트가 0입니다. 당신이 그것에 하나를 더할 때 우리는 숫자에 이름을 붙입니다 ... -1. –

+1

David,이 점은 2의 보수에 해당하지만 부호 비트 또는 1의 보수 (적어도 순진하지는 않음)에는 해당되지 않습니다. 어느 옵션이든 컴퓨터를 잘 아는 사람의 입장에서 똑같이 설명 할 수 있습니다. – Joey

2

예는해야하고, 2의 보수 시스템에 설정된 모든 비트 숫자가 -1에 동일 0이 설정되지 않은 모든 비트를 가지고 있기 때문에, ~ A는 모든 비트가 설정됩니다 $.

코드가 예상대로 동작합니다.

0

정수는 2의 칭찬 형식으로 저장됩니다.

양식 될 수 윤곽 광고 다음과

1) 숫자이어서 이진 값

저장되는 양의 값이 저장되는 경우

예 $ 브로 = 5; 여기

은 $ 브로는의 ordiary 이진 equivlent 포함 5 = 0101 // 비트 수는 구체적인

2)는 다수의 네거티브 저장하는 경우 다음 조로 칭찬의 저장 -5 말에 따라

여기에 첫 번째
$val = -5; 

5의 2의 칭찬 즉, 5 + 1

~ 0101 = 1010 

tnen 단순히 하나의 칭찬이 1

추가 발견된다
1010 + 
    1 
    ----- 
    1011 

이 1011은 $ val에 저장됩니다.

같은 방식으로, $ val = 0; 00

~ $ 발 => 2의 칭찬 형태 -2의 equalient은 11

당신이주의 깊게 관찰하는 경우 마지막으로, 당신은 요청할 수 있습니다,

그래서 어떻게 나타낼 수 11

를 저장 ? 이진 값이 1011이고 2의 comp에서 -5의 값과 충돌합니까?

대답은 숫자를 나타내는 데 사용되는 비트 수입니다. 2의 complimwent 형태

그러면 그것은하지

-2^(n-1) to 2^(n-1) -1 ; 
관련 문제