理解c++中的位移位

Understanding the bit shifting in C++

本文关键字:c++ 理解      更新时间:2023-10-16

我必须调试别人编写的c++代码。我在位移位方面的经验很少,因此有了这个问题。下面是相同代码的修改版本(值和与位移位无关的代码):

void get16Bits1(const char * data)
{
    cout<<(((uint32_t)((const uint8_t *)(data))[1]) << 8)<<endl;
    cout<<(uint32_t)((const uint8_t *)(data))[0]<<endl;
}
int main(){
   const char * data = "francesmccurdey";
   get16Bits1(data);
   return 0;
}

打印出:

29184
102

我没有得到的部分是get16Bits1()函数,转换到uint32_t会改变输出。当我有这个:

void get16Bits1(const char * data)
    {
        cout<<((const uint8_t *)(data))[1]<<endl;
        cout<<((const uint8_t *)(data))[0]<<endl;
    }
output is:
r
f

我在linux架构下使用gcc编译器编译:x86_64,字节顺序是小端序。

cout<<(((uint32_t)((const uint8_t *)(data))[1]) << 8)<<endl;

data[1]'r',在ASCII中是0x72。

0x72 << 8 = 0x7200 = 29184

get16Bits1()的下一行:cout<<(uint32_t)((const uint8_t *)(data))[0]<<endl

这一行只是将值data[0]打印为uint32_t

data[0]'f',在ASCII中是0x66(十进制102)。

看十六进制的输出有帮助吗?

7200
66
  • http://ideone.com/0tJcsQ