LV080-大小端与位操作
一、大小端
大端模式( Big-endian),是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中 。
小端模式( Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中 。
比如: 0x12345678,在大/小端模式的存储位置如下:
c
内存地址 大端模式 小端模式
addr+3 0x78 0x12
addr+2 0x56 0x34
addr+1 0x34 0x56
addr 0x12 0x78二、位操作
1. 移位
c
int a = 0x6; // 二进制是 0b0110
int b = a<<1;
int c = a>>1;第 2 行,对 a 左移一位,从 0b0110→0b1100,即 b=0xC 第 3 行,对 a 右移一位,从 0b0110→0b0011,即 b=0x3
2. 取反
c
int a = 0x6; // 二进制是 0b0110
int b = ~a;第 2 行,对 a 按位取反,从 0b0110→0b1001,即 b=0x9
3. 位与
只有对应的两个二进位都为 1 时,结果位才为 1 ,例如
c
int a = 0x6; // 二进制是 0b0110
int b = 0x7; // 二进制是 0b0111
int c = a&b;第 4 行, a&b,二进制是 0b0110,即 c=0x6
4. 位或
只要对应的二个二进位有一个为 1 时,结果位就为 1 ,例如
c
int a = 0x6; // 二进制是 0b0110
int b = 0x7; // 二进制是 0b0111
int c = a|b;第 4 行, a|b,二进制是 0b0111,即 c=0x7
5. 置位
将某一位置1,例如
c
int a = 0x6; // 二进制是 0b0110
int a |= (1<<3);第 3 行,将变量 a 的 bit3 置 1。 1<<3 = 0b1000,然后 0b1000|0b0110=0b1110,即 a=0xe
6. 清位
将某一位清0,例如
c
int a = 0x6; // 二进制是 0b0110
int a &= ~(1<<2);第 3 行,将变量 a 的 bit2 清位。 ~(1<<2) = 0b1011,然后 0b1011&0b0110=0b0010,即 a=0x2