문제

32 비트 정수에 저장된 숫자 (2s 보완)에 서명했으며 16 비트 필드를 추출하고 싶습니다. 32 비트 서명 숫자에서 낮은 16 비트를 추출하면 원래 (32 비트) 숫자가 16 비트에 맞는 한 결과가 정확합니까?

양수의 경우 사소하게 사실이며, 부정적인 것 같습니다. 그러나 입증 될 수 있습니까?

미리 감사드립니다

도움이 되었습니까?

해결책

예, 두 사람의 보완에서 부호 비트는 "끝까지"왼쪽으로 확장됩니다. 서명 된 int에 서명 된 단편을 캐스트하면 번호는 다음과 같습니다. "서명 확장" 그리고 같은 가치가 있습니다.

예시: Nibble(-2) = 1110 => Byte(-2) = 1111_1110

분명히 반대의 경우에도 적어도 하나의 부호 비트를 캡처하면 숫자의 값이 변경되지 않은 상태로 유지됩니다.

다른 팁

내 (두 번째) 질문을 읽은 후, 비트를 "추출"해야하는 것처럼 보이지 않고 정수를 변환합니까?

즉, 다음과 같은 일을합니다.

int negative = -4711;
short x = (short) negative;

이 경우 컴파일러는 원래 번호의 정밀도가 가능한 한 할당에서 변환되도록합니다. 기본 하드웨어가 2 : S 보완을 사용하지 않더라도 마찬가지입니다. 그것이 그렇다면, 이것은 Motti가 설명한 것처럼 단지 잘린 것일 수 있습니다.

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