我必须实现两个函数,将有符号转换为无符号,反之亦然。我正在使用 C++11 和 Linux。
该系统是二进制补码,可以采用 char、int、long 等。接口(interface)必须与声明的一样,我已尝试实现一些东西。有更好的方法吗?这些正确吗?如何根据位数更改实现?我需要一些建议。
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 一起使用。因此,我可能需要将返回类型中的值限制为 18 位或 4 位等...
最佳答案
不是没有位的依赖而是重载函数:
uint32_t signedToUnsigned(int32_t x);
uint64_t signedToUnsigned(int64_t x);
uint16_t signedToUnsigned(int16_t x);
等等。 但是,简单的 static_cast 应该可以,请阅读:How does one safely static_cast between unsigned int and int?
关于c++ - 将有符号转换为无符号,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26036504/