繁体   English   中英

理解C ++中的位移

[英]Understanding the bit shifting in C++

我必须调试由其他人编写的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\0";
   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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM