<pre name="code" class="cpp">//1个字节又是8位二进制数 1kb = 8b
int a = 010 + 010;//0开头是八进制
//0b开头是二进制 0x开头是十六进制
printf("%x", a);//%o打印八进制 %x打印十六进制
//位运算符, 先换成二进制数然后再计算
//按位与&(同为1,则为1,否则为0)
printf("%d\n", 7 & 5);
//按位或|(只要有一个为1,则为1,否则为0)
printf("%d\n", 7 | 5);
//按位非~
printf("%d\n", ~ 6 );
//按位 异或^(相同为0,不同为1)
// 3 = 011
// 5 = 101
// 6 = 110
printf("%d\n", 3 ^ 5);
//左移运算符 << (左移一位乘2)
// 0000 0010
printf("%d\n", 2 << 2);
//右移运算符 >> (右移一位除2)
// 0001 0000
// 0000 1000
printf("%d\n", 14 >> 5);
二进制数的高四位和低四位互
unsigned char a = 130;
unsigned char left = 0;//存储左移之后的结果
unsigned char right = 0;//存储右移之后的结果
left = a << 4;
right = a >> 4;
printf("%d", left | right);
二进制数的奇偶位互换
如果想做清零操作,
使用按位与, 清零位为0,保留位为1
unsigned char b = 0b10110111;
unsigned char left = 0;//存储左移之后的结果
unsigned char right = 0;//存储右移之后的结果
(1)先左移一位
left = b << 1;
(2)保存偶数位,将奇数位清零
left = left & 0b10101010;
(3)右移一位
right = b >> 1;
(4)保留奇数位,将偶数位清零
right = right & 0b01010101;
(5)按位或
printf("%d\n", left | right);
栈区内存分配原则:从高到低分配,从低到高存取