先搞清楚little_endian和big_endian,前者是指数据的高位字节存放在内存的高位地址中,低位字节存放到低位地址中,后者则相反。
1)cout<<'abc';输出是一整型值;2)char c='abc';cout<<c;输出是c(在little_endian下)。
原因如下:
1)前者等价于int i='abc';cout<<i;
二进制:a:01100001 b:01100010 c:01100011
内存存放:(内存地址假设从80开始)
80:01100011 //c
81:01100010 //b
82:01100001 //a
83:00000000 //int型数据占32位 不足补零。
上面的内存内容表示:00000000 01100001 01100010 01100011 即:6382179
2)后者和1)很相似。
当字符字面量包含多个单字节字符或者包含了不能够用char表示的字符时(如汉字),则改字面量的整型值为implementation_defined。即1)中所说。所以从6382179转换为char,截取低位8bit即:01100011 即:c。
本文详细解释了little_endian和big_endian的概念,并通过具体的C++代码示例展示了不同存储方式下字符和整数的输出差异。对于理解数据在内存中的存储顺序及C++输出行为很有帮助。

695

被折叠的 条评论
为什么被折叠?



