문제

C와 C ++의 맥락에서 언급 된 것을 보았지만 서명되지 않은 변수와 서명되지 않은 변수의 차이점은 무엇입니까?

도움이 되었습니까?

해결책

서명 된 변수, 서명 된 정수와 같은 Will 긍정적 인 범위와 부정적인 범위에서 숫자를 나타낼 수 있습니다..

서명되지 않은 변수, 서명되지 않은 정수와 같은 Will 긍정적 인 숫자를 나타낼 수 있습니다.

동일한 유형의 서명 및 서명 된 변수 (예 : int 그리고 byte) 둘 다 동일한 범위 (각각 65,536 및 256 숫자 범위)를 가지고 있지만 부호없는 것은 해당 서명 된 변수보다 더 큰 크기 수를 나타낼 수 있습니다..

예를 들어, an unsigned byte 값을 나타낼 수 있습니다 0 에게 255, 동안 signed byte 표현할 수 있습니다 -128 에게 127.

Wikipedia 페이지 on 서명 번호 표현 비트 레벨에서의 표현의 차이와 정수 (컴퓨터 과학) 페이지는 서명/부호없는 정수 유형에 대한 범위 테이블을 제공합니다.

다른 팁

일반적으로 '부호 비트'라고하는 반면, 우리가 일반적으로 사용하는 이진 값에는 실제 부호 비트가 없습니다.

대부분의 컴퓨터는 두 개의 보수 산술을 사용합니다. 마이너스 숫자는 1 인상 (모든 비트를 플립)하고 하나를 추가하여 생성됩니다.

      5 (decimal) -> 00000101 (binary)
      1's complement: 11111010
      add 1: 11111011 which is 'FB' in hex


이것이 서명 된 바이트가 -127에서 +127 대신 -128에서 +127로 값을 보유하는 이유입니다.

      1 0 0 0 0 0 0 0 = -128
      1 0 0 0 0 0 0 1 = -127
          - - -
      1 1 1 1 1 1 1 0 = -2
      1 1 1 1 1 1 1 1 = -1
      0 0 0 0 0 0 0 0 = 0
      0 0 0 0 0 0 0 1 = 1
      0 0 0 0 0 0 1 0 = 2
          - - -
      0 1 1 1 1 1 1 0 = 126
      0 1 1 1 1 1 1 1 = 127
(1 ~ 127주기를 추가하십시오 :)
      1 0 0 0 0 0 0 0이 차트의 상단에서 볼 수있는 것은 -128입니다.


적절한 부호 비트가 있다면, 값 범위는 동일합니다 (예 : -127 ~ +127). 하나의 비트가 표시에 예약되어 있기 때문입니다. 가장 중요하지 않은 비트가 부호 비트 인 경우 다음과 같습니다.

      5 (decimal) -> 00000101 (binary)
      -5 (decimal) -> 10000101 (binary)

이 경우 흥미로운 점은 우리는 0과 음수 0을 모두 가지고 있다는 것입니다.
      0 (decimal) -> 00000000 (binary)
      -0 (decimal) -> 10000000 (binary)


우리는 두 개의 보수가있는 -0이 없습니다. -0은 -128입니다 (또는 가장 일반적인 값보다 더 일반적으로). 우리는 보완적인 일을합니다. 1 비트 모두 음의 0입니다.

수학적으로 -0은 0과 같습니다. -0 <0 인 컴퓨터를 모호하게 기억하지만 지금은 언급 할 수 없습니다.

서명 된 변수는 하나의 비트를 사용하여 양수인지 부정적인지 여부를 표시합니다. 서명되지 않은 변수에는이 비트가 없으므로 동일한 공간에 더 많은 숫자를 저장할 수 있지만 0 이상의 음수만을 저장할 수 있습니다.

이상: 서명되지 않고 서명 된 정수

서명되지 않은 변수는 긍정적 인 숫자 일 수 있습니다. 왜냐하면 그들은 음수임을 나타낼 능력이 부족하기 때문입니다.

이 능력을 '부호'또는 '서명 비트'라고합니다.

부작용은 사인 비트가 없으면 숫자를 나타내는 데 사용할 수있는 비트가 하나 더있어 표현할 수있는 최대 숫자를 두 배로 늘립니다.

서명 된 변수 0, 양수 또는 부정적 일 수 있습니다.

서명되지 않은 변수 0이거나 양수 일 수 있습니다.

서명되지 않은 변수는 때때로 실제 값을 나타 내기 위해 더 많은 비트를 사용할 수 있기 때문에 때때로 사용됩니다. 더 큰 범위를 제공합니다. 또한 예를 들어 음수 값이 기능으로 전달되지 않도록 할 수 있습니다.

int 범위에 서명 된 경우 int 범위 -32768 ~ +32767에 서명 된 경우 valse value가 양수 여야 할 때 사용됩니다.

서명되지 않은 변수 수학적 부호없이 내부적으로 표현되는 변수입니다 (플러스 또는 마이너스) '제로'또는 양수 값 만 저장할 수 있습니다. 서명되지 않은 변수가 있다고 가정 해 봅시다 n 비트 크기는 2^n (2 전력 n) 값 -0- (2^n -1)를 나타낼 수 있습니다. 반면에 서명 된 변수는 부호를 나타내는 데 '잃어버린'비트를 잃어 버리므로 0을 포함하여 (2^(n -1) -1) ~ (2^(n -1))의 값을 저장할 수 있습니다. 따라서, a 서명 된 변수 저장할 수 있습니다 양수 값, 음수 값 및 0.

추신:
내부적으로 수학적 부호는 보완 형식, 2의 보완 양식 또는 부호 비트 (예 : 0-> +, 1-> -)로 표시 될 수 있습니다.
이 모든 방법은 N 비트 (2^N)의 표현 가능한 값의 범위를 양의, 음수 및 0으로 효과적으로 나눕니다.

이것은 단지 나의 두 센트 가치입니다.

이게 도움이 되길 바란다.

이것은 정확한 정의가 아닐 수도 있지만 예를 들어 드리겠습니다. 시스템 시간에서 가져 오는 임의의 숫자를 만들려면 서명되지 않은 변수를 사용하면 서명 된 숫자가 제공되는 임의 숫자의 큰 범위가 있으므로 유익합니다. 양수와 음수 모두. 시스템 시간은 음수가 될 수 없으므로 서명되지 않은 변수 (양수 만)를 사용하고 광범위한 랜덤 숫자가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top