development

비트 시프트는 엔디안에 의존합니까?

big-blog 2020. 6. 18. 07:25
반응형

비트 시프트는 엔디안에 의존합니까?


내가 숫자를 'numb'=1025 [00000000 00000000 00000100 00000001]표현 했다고 가정 해보십시오 .

리틀 엔디 언 머신에서 :

00000001 00000100 00000000 00000000

빅 엔디안 머신에서 :

00000000 00000000 00000100 00000001

이제 10 비트에 왼쪽 시프트를 적용하면 (즉 : numb << = 10) 다음을 가져야합니다.

[A] Little-Endian 머신에서 :

GDB에서 알 수 있듯이 Little Endian은 왼쪽 이동을 3 단계로 수행합니다. [처리 만 더 잘 이해하기 위해 '3'단계를 표시했습니다.]

  1. 아니오를 취급하십시오. 빅 엔디안 컨벤션에서 :

    00000000        00000000        00000100    00000001
    
  2. 왼쪽-시프트 적용 :

    00000000        00010000        00000100        00000000
    
  3. Little-Endian에서 결과를 다시 나타냅니다.

    00000000        00000100        00010000        00000000 
    

[비]. 빅 엔디안 머신에서 :

00000000        00010000        00000100        00000000

내 질문은 :

리틀 엔디안 컨벤션에 직접 왼쪽 쉬프트를 적용하면 다음과 같이됩니다.

numb:

00000001 00000100 00000000 00000000

numb << 10:

00010000 00000000 00000000 00000000

그러나 실제로는 다음을 제공합니다.

00000000        00000100        00010000        00000000 

두 번째 결과 만 달성하기 위해 위의 세 가지 가상 단계를 보여주었습니다.

위의 두 결과가 다른 이유를 설명해주십시오. 실제 결과 numb << 10가 예상 결과와 다릅니다.


엔디안은 값이 메모리에 저장되는 방식입니다. 엔디안과 상관없이 프로세서에로드 될 때 비트 시프트 명령은 프로세서 레지스터의 값에서 작동합니다. 따라서 메모리에서 프로세서로의 로딩은 빅 엔디안으로 변환하는 것과 동일하며, 시프 팅 작업이 다음에 새로운 값이 메모리에 다시 저장되어 리틀 엔디안 바이트 순서가 다시 적용됩니다.

@jww 덕분에 업데이트 : PowerPC에서 벡터 이동 및 회전은 엔디안에 민감합니다. 벡터 레지스터에 값을 가질 수 있으며 시프트 는 little-endian 및 big-endian에서 다른 결과를 생성 합니다.


C의 다른 부분과 마찬가지로 비트 시프트는 표현이 아닌 값으로 정의됩니다 . 1만큼 왼쪽 이동은 2로 곱셈되고 오른쪽 이동은 나눗셈입니다. 비트 연산을 사용할 때와 마찬가지로 항상 서명을주의하십시오. 모든 것은 서명되지 않은 정수 유형에 대해 가장 잘 정의되어 있습니다.


어떤 시프트 명령이 더 높은 비트를 먼저 시프트하는지는 왼쪽 시프트로 간주됩니다. 어떤 시프트 명령이 하위 비트를 먼저 시프트 시키는가 올바른 시프트로 간주됩니다. 그런 의미에서의 동작 >><<에 대한 unsigned번호 엔디안에 의존하지 않습니다.


컴퓨터는 우리가하는 방식대로 숫자를 쓰지 않습니다. 값은 단순히 이동합니다. 바이트 단위로 보려고 주장한다면 (컴퓨터가 그렇게하는 방식은 아니지만) 리틀 엔디안 컴퓨터에서 첫 번째 바이트가 왼쪽으로 이동하고 초과 비트는 두 번째 바이트로 이동한다고 말할 수 있습니다. 등등.

(반드시, 리틀 엔디안은 더 높은 주소를 사용하여 수평이 아닌 수직으로 바이트를 쓰면 더 의미가 있습니다. 메모리 맵 다이어그램이 일반적으로 그려지는 방식입니다.)

참고 URL : https://stackoverflow.com/questions/7184789/does-bit-shift-depend-on-endianness

반응형