2016-10-13 5 views
0

이진수가 부호있는 정수 또는 부호없는 정수인지 여부를 컴퓨터가 어떻게 알 수 있습니까? 예 : 이진수 1000 0001은 서명 된 경우 -128, 서명되지 않은 경우 129로 해석 될 수 있습니다.정수가 서명되었는지 여부를 확인하는 방법은 무엇입니까?

C와 같은 언어에서 부호없는 정수를 사용하면 (부호가 이해하는대로) 부호를 정의하지 않아서 얻는 추가 비트로 인해 더 큰 정수를 사용할 수 있다는 장점이 있습니다. 그러나, 어딘가에, 첫 번째 비트가 부호를 나타내는 지 또는 숫자의 크기를 나타내는 지의 일부인지 여부를 추적하는 무언가가 필요합니다.

+0

"첫 번째 비트가 부호를 나타내는 지 또는 숫자의 크기를 나타내는 지의 일부인지 여부를 추적하는 곳이 필요합니다." 당신이 사용하는 타입? – tkausl

+0

숫자 대신 하나의 숫자 집합이있는 경우 상위 비트가 설정 될 때 두 번째 - 상위 비트가 보통 설정되어 있는지 확인할 수 있습니다. 이는 값이 서명되었지만 오류가 없지만 양호 할 것입니다. . –

답변

1

메모리에 서명되지 않았거나 서명 된 컴퓨터는 이진 표현을 10000001로 저장합니다. 메모리에있는 숫자를 살펴 봄으로써 이진수를 부호 또는 부호없는 것으로 분류하는 것은 불가능합니다. 이 번호를 서명 또는 서명으로 처리해야하는지 여부를 알기위한 지침이 필요합니다. 이것은 컴파일러가 들어오는 곳입니다. 프로그래머는 서명 된 코드를 부호없는 코드로 지정합니다. 컴파일러는 작성된 코드를 번역하고 해당 번호에 대해 원하는 지침을 생성합니다. 프로그래밍 언어에 따라 이러한 명령어를 생성하는 방법이 다를 수 있습니다. 기억해야 할 중요한 부분은 이진수가 메모리에 아무런 차이가 없다는 것입니다. 프로그래머가이 숫자를 컴파일러에서 처리하는 방법을 전달하는 방법 만 다릅니다.

0

가변 유형은 부호가 있는지 여부를 추적합니다. 레지스터의 실제 값은 정보를 저장하기 위해 여분의 비트가 필요함을 알려주지 못합니다. 서명되지 않은 노래 전환에 대해 경고하는 경고를 켤 수 있으며 실수로 서명되지 않은 값을 부호있는 값에 할당하거나 그 반대로 컴파일러에서 소리를 지르게됩니다.

1

컴퓨터가 기호에 관해 알 필요가 없습니다. 번호 인쇄 방법입니다. 산술 연산이 잘 작동하며 부호가 있거나 부호가없는 경우 상관 없습니다. 필요한 길이로 자르면 결과가 정확합니다. 8 비트에 곱

예 :

// negative times negative 
254 * 254    = 64516    // decimal unsigned - it's equal to 4 
((-2) * (-2))   = 4     // decimal signed 
1111 1110 * 1111 1110 = 1111 1100 0000 0100 // binary - 0000 0100 

// negative times positive 
254 * 2    = 508    // decimal unsigned - it's equal to (-4) 
-2 * 2    = -4     // decimal signed 
1111 1110 * 0000 0010 = 0000 0001 1111 1100 // binary - 1111 1100 

그래서 당신이 자바와 같은 언어를 사용하는 경우 1111 (1100)를 표현하는 방법까지 당신에게, 그것은 서명되지 않은 숫자 형식을 지원하지 않습니다.

관련 문제