부호로 변환하거나 부호로 변환하는 두 가지 기능을 구현해야합니다. 나는 C++ 11과 리눅스를 사용하고있다.부호있는 부호없는 부호로 또는 부호 부호로 변환하기
시스템은 2의 보수이며 char, int, long 등을 사용할 수 있습니다. 인터페이스는 명시된대로 있어야하며 뭔가 구현하려고했습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 이게 맞습니까? 어떻게 비트 수를 기반으로 구현을 변경할 수 있습니까? 조언이 필요해.
uint32_t signedToUnsigned(int32_t x, uint8_t bits)
{
return (x > 0 ? x:-x);
}
int32_t unsignedToSigned(uint32_t x, uint8_t bits)
{
if(x <= INT_MAX)
return static_cast<int>(x);
if(x >= INT_MIN)
return static_cast<int>(x - INT_MIN)+ INT_MIN;
else
{
printf("ERROR");
return x;
}
}
편집 :
이는 HW와 함께 사용됩니다 나는이 비트에서 지정할 필요가있다. 그래서, 대신 같은 비트없이 과부하 한 기능의 의존성이있는의 ... 18bits 또는 4 등으로
여기서 두 번째 인수 비트는 무엇입니까? –
'unsignedToSigned()'함수가 깨졌습니다. 'x'가'INT_MAX'보다 크거나'INT_MIN'보다 작은 경우를 생각해 보면, 제가 의미하는 바를 알 수 있습니다. 인수가'int32_t' (32 비트 고정) 인 경우, 그 비트가 몇 비트인지 결정합니다. 그렇지 않습니까? 모두 당신의 질문이 무엇인지 알기가 힘들다. – DevSolar
아마도 int 나 char 등의 타입을 기반으로 코드를 바꿀 필요가 있는지 궁금하다. – user1876942