理解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 ";
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
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++,我收到一个无法理解的编译器错误
- 理解c++中的引用
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 通过实例理解std::move及其目的
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 试图理解类对象的行为
- 难以理解某些人解决IOI问题的源代码
- 有人能帮我理解这个c++代码吗
- 理解循环C++中的循环
- 理解这行C++指针代码
- 理解GCC中的std::pow实现
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 如何理解新的运算符重载?
- 为什么理解这个递归示例如此难以转化为直觉?
- 我正在尝试理解代码块中的这些错误
- C++理解计算字符变量的问题
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- NS3 插槽混淆(需要帮助理解)