0
부호가있는 13 비트 값에서 부호있는 16 비트 값으로 변환하는 데 더 좋은 방법이 있습니까? 두 값은 16 비트 워드에 있으며, 13 비트 값은 3 비트 시프트됩니다.부호가있는 13 비트 값을 부호있는 16 비트로 변환
S = Sign, O = Value bit, X = Unused
a is the signed 13-bit | SOOO OOOO OOOO OXXX
b is the signed 16-bit | SOOO OOOO OOOO OOOO
현재 구현
b = a & 0x7FF8; // Remove sign XOOO OOOO OOOO OXXX
b = b >> 3; // Shift value 3 bit XXXO OOOO OOOO OOOO
b = b | (a & 0x8000); // Add sign SXXO OOOO OOOO OOOO
은 그로 컴파일 얻을합니까? 필자는 필자의 필사적 인 두뇌가 이해할 수없는 이런 것들에 대해 컴파일러가 까다로운 최적화를 수행하는 것을 보았습니다. 또한 당신이 목표로 삼고있는 아키텍처가 도움이 될 수 있다고 생각합니다. 당신은 언제나 'cs13bvts16b' 명령으로 어떤 CISC를 목표로 삼을 수 있습니다 ... –
우리는 (a) 2의 보수 표현과 (b) C (또는 밀접하게 관련된 언어)에 대해 말하는 것을 확인할 수 있습니까? –
@PaulR a) 맞습니다. 2의 보수입니다. b) 일반 솔루션을 찾고 구현시 구조화 된 텍스트를 사용하기 때문에 일부 의사 C를 입력했습니다. – ihatetoregister