2014-10-22 8 views
2
에 대한

그래서 나는 C#에서 다음 RotateLeft 알고리즘이 있습니다C 번호 : 왼쪽 회전 알고리즘 다른 비트 번호 매기기 구성표

public static ushort RotateLeft(ushort value, int count) 
    { 
     int left = value << count; 
     int right = value >> (16 - count); 
     return (ushort)(left | right); 
    } 

번호 매기기 방식이 다른 경우이 알고리즘은 차이가 있습니까? 번호 매기기으로

은 MSB-0 또는 LSB-0

MSB-0

0    7 
1 0 0 1 0 1 1 0 

있다면 내 말은 LSB-0

7    0 
1 0 0 1 0 1 1 0 

내가 1 왼쪽 시프트 싶어 말 알고리즘에 영향을 미치는 다른 번호 매기기 체계가 있습니까?

답변

1

알고리즘이 기본 시스템의 작은 또는 큰 불가지론 인 것처럼 보입니다. endianness. 즉, OR 연산이 반환되기 전에 다른 쪽에서 시프트 된 비트를 다시 추가하기 때문에 번호 매김 체계에 관계없이 동일하게 작동합니다. 비트 수준의 작업과 플래그 검사에이 코드를 사용한다고 가정하면 필요한 모든 것일 수 있습니다.

나머지 프로그램에 어떻게 적용되는지 알지 못하면 반대쪽 번호 매기기 체계를 사용하여 다른 플랫폼에서 예상대로 작동하는지 여부를 말하기 어렵습니다. 예를 들어 MSB-0을 사용하는 장치에서이 파일을 실행하고 이진 파일에 일부 이동 데이터를 쓴 다음 LSB-0을 사용하는 장치에서 해당 이진 데이터를 다시 읽으면 예상 한 바가 아닐 것입니다 .

소프트웨어가 다른 엔디 언 시스템에서도 동일하게 작동하도록하려면 .NET BitConverter Class을 살펴보십시오. 효율적인 수학 연산을 위해 이것을 사용하는 경우 정적 BitConverter.IsLittleEndian 필드를 사용하면 기본 아키텍처를 확인할 수 있으므로 다른 방식으로 이진 데이터를 반대로 바꿀 수 있습니다.