位移有符号整数

时间:2014-12-17 21:44:09

标签: c++ bit-manipulation byte-shifting

我有点移位符号整数第一个字节是指数接下来4是尾数。这似乎并不总是起作用我相信它是因为它被称为char但是当我使它成为一个有符号或未分配的char它仍然不是100%。任何想法?

 char mdentrypxexp[1];    
 memcpy( mdentrypxexp, message + pos, 1 );
 int32_t MDEntryPxExp = mdentrypxexp[0]; 
 std::cout <<  "MDEntryPxExp  " << MDEntryPxExp << std::endl;
 pos+=1;

 char mdentrypxmantissa[4];    
 memcpy( mdentrypxmantissa, message + pos, 4 );

 int32_t MDEntryPxMantissa = mdentrypxmantissa[0] | ( (int32_t)mdentrypxmantissa[1] << 8 ) | (int32_t)mdentrypxmantissa[2] << 16 ) | ( (int32_t)mdentrypxmantissa[3] << 24 ); 
 std::cout << "MDEntryPxMantissa  " << MDEntryPxMantissa << std::endl;
 pos+=4;

 double MDEntryPx = MDEntryPxMantissa * pow10(MDEntryPxExp);
 std::cout << " MDEntryPx=" << MDEntryPx; 

1 个答案:

答案 0 :(得分:0)

您正在从4签名的int32_t构建一个签名的int32_t。向上转换2的补码有符号整数使得按位运算变得棘手。使用无符号整数然后转换。

uint32_t MDEntryPxMantissa_tmp = ( static_cast< uint32_t >( mdentrypxmantissa[0] ) | ( static_cast< uint32_t >( mdentrypxmantissa[1] ) << 8 ) | static_cast< uint32_t >( mdentrypxmantissa[2] ) << 16 ) | ( static_cast< uint32_t >( mdentrypxmantissa[3] ) << 24 ) ); 
int32_t MDEntryPxMantissa = *reinterpret_cast< int32_t * >( &MDEntryPxMantissa_tmp );
相关问题