Bet*_*eto 4 c++ bit-manipulation bit-shift sign-extension
我有3个无符号字节分别来自电线.[byte1,byte2,byte3]
我需要将这些转换为带符号的32位,但我不太确定如何处理负值的签名.
我想把字节复制到int32中的高3字节,然后将所有内容移到右边,但我读到这可能有意想不到的行为.有没有更简单的方法来处理这个?
该表示使用了两个人的赞美.
你可以使用:
uint32_t sign_extend_24_32(uint32_t x) {
const int bits = 24;
uint32_t m = 1u << (bits - 1);
return (x ^ m) - m;
}
Run Code Online (Sandbox Code Playgroud)
这是因为:
模板版
template<class T>
T sign_extend(T x, const int bits) {
T m = 1;
m <<= bits - 1;
return (x ^ m) - m;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1844 次 |
最近记录: |