Open techiall opened 5 years ago
大端模式,数据的高字节保存在内存的低地址中;
小端模式,数据的高字节保存在内存的高地址中。
首先,为什么会有小端字节序? 答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。(也就是从低位开始处理数据的称之为小端模式 但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。 http://www.ruanyifeng.com/blog/2016/11/byte-order.html
首先,为什么会有小端字节序?
答案是,计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。(也就是从低位开始处理数据的称之为小端模式
但是,人类还是习惯读写大端字节序。所以,除了计算机的内部处理,其他的场合几乎都是大端字节序,比如网络传输和文件储存。
http://www.ruanyifeng.com/blog/2016/11/byte-order.html
/* * 返回 1 / 0 * 1 代表 小端 * 0 代表 大端 */ bool check() { int value = 0x12345678; return (*((char *)&value) == 0x78); }
char *sz = "0123456789"; int *p = (int*)sz; printf("%x\n",*++p); // 字符'0'对应的十六进制是0x30,请问在x86环境下程序输出是多少?
*++p
int *
*p
sz
计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。
各字符对应地址如下: 0 1 2 3 4 5 6 7 8 9 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39
因此打印 *++p 的地址,也就相当于打印 4567 的地址。也就是 0x37363534 。
4567
0x37363534
大端模式,数据的高字节保存在内存的低地址中;
小端模式,数据的高字节保存在内存的高地址中。
判断大小端
一道笔试题目
*++p
的运算顺序为:先 ++,后进行取值。int *
占四个字节*p
指向的是sz
的首地址。计算机电路先处理低位字节,效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。
。因此打印
*++p
的地址,也就相当于打印4567
的地址。也就是0x37363534
。