1
2
3
4
5
6
7
int main()
{
int i[2];
i[0] = 1 << 10, i[1] = 0;//将i[1]初始化为 0,保证i[0]之后的位全为 0
int *p1 = &i[0], *p2 = (int*)((int)p1 + 1);
cout << *p1 << " " << *p2;
}

输出 1024 4

可以看出这里使用的是 LSB 0 位序。

比特序分为两种:LSB 0 位序和MSB 0 位序。
LSB 0 位序是指:字节的第 0 位存放数据的 least significant bit,即我们的数据的最低位存放在字节的第 0 位。
MSB 0 位序是指:字节的第 0 位存放数据的 most significant bit,即我们的数据的最高位存放在字节的第 0 位。

i[2] 的存储状态如下(为方便表示,假设 &i[0] == 0x100

0x100 0x101 0x102 0x103
00000000 00100000 00000000 0000000

*p1 (0x100) 时,读到的是 100 00000000,即 1024;
*p2 (0x101) 时,读到的是 100,即 4。

对于更深层次的问题,先挖个坑,学计算机网络时也许要接触。