我如何签名扩展一个5位值
How can I sign-extend a 5-bit value?
我有一个无符号整数(32位),其中我存储了一个n位的有符号数(2的补码,所以-16≤x <</p>
我如何使用两者的补数将其有效地转换为符号解释?
一个简短的例子来说明我的意思:
int numUnsigned = 15; // Store a 4-bit value 0b1111
int numSigned = ???; // Convert to 4-bit signed value using two's complement
// Now numSigned should be -1, since 0b1111 == -1
我整个上午都在摆弄这些零碎的东西,但好像就是弄不好。
如果我正确理解了你的问题,你只需要一个符号扩展,而不是2的互补(至少根据你在第二行代码中的评论)。
如果我是正确的,你可以做以下(让我们假设你有N个数字,0
unsigned msb_mask = 1 << (N-1); // setup a mask for most significant bit
numSigned = numUnsigned;
if ((numSigned & msb_mask) != 0) // check if the MSB is '1'
{
numSigned |= ~(msb_mask-1); // extend the MSB
}
也许我误解了你的问题…如果是,那就忽略我的回答。
编辑
@harold建议:
numSigned = (numUnsigned^msb_mask)-msb_mask ;
相关文章:
- 创建一个包含 c++ 默认值的环境文件
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- CreateDIBSection为同一图像返回不一致的位图位值
- 将双精度变量设置为另一个变量的值
- 将一个双倍值乘以10会发生什么
- OpenCV矩阵奇怪的加法,乘法与浮点数和8位值
- C++将 16 位值转换为 32 位值
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- 使用 SIMD 基于另一个矢量位值计算值的乘积
- 为什么字符指针会得到一个 32 位值 (ffffff88)
- Ada到C++:传递一个无符号的64位值
- 无法使用 <math.h 中的 C/C++ nextafter/nexttowards 函数获取下一个 32 位浮点值>
- 找到与另一个二进制模式匹配的所有 2 位值,然后对它们求和
- 以字节形式读取文件,并将其存储到一个具有确定性的8位值的数组中
- 将两个8位的bitset赋值给一个16位的bitset
- 我如何从一个8位整数中得到一个大于8位的值
- 我如何签名扩展一个5位值
- 我如何传递一个直接的4位值到_mm256_blend_pd的最后一个参数
- 求一个100位数字在C语言中对10^9+7 mod后的值
- 需要一个散列函数来创建ipv6 16字节地址和TCP 2字节端口号的32位值