// int a = 010 + 10 ; //0开头是八进制.
//0b 开头是二进制
//0x 开头是十六进制
// printf("%d " ,a ); //%d 打印十进制整数.
//%x 打印十六进制. (字母小写) %X 打印十六进制 (字母大写)
// %o 打印八进制
//一个字节 又是八位二进制数.
//位运算符
//按位与 & (同为1 , 则为1 , 否则 为0 );
// 按位或 | (同为 0 , 则为 0 , 否则 为 1 );
//按位非 ~
//按位异或 ^ (相同为 0 ,不同为 1);
// 左移 运算符 左移一位相对于乘 2 ;
// 右移 运算符 右移一位相对于除 2 ;
//二进制的高四位 和第四位互换.
unsigned char a = 130 ;
unsigned char left = 0; //存储左移之后的结果
unsigned char right = 0 ; //存储右移之后的结果
left = a << 4 ;
right = a >> 4 ;
printf("%d" , left | right) ;
//二进制数的奇偶位互换 .
//1,偶~奇 (右移一位)
// 保留奇数位,将偶数位清零 . & 01010101
//2,奇 ~ 偶 (左移一位) ;
//保留偶数位 , 将奇数位 清零 & 10101010
/**
unsigned char b = 0b10110111;
unsigned char left = 0 ; //存储左移后的结果
unsigned char right = 0 ; //存储右移后的结果
//如果想做清零操作使用 按位与 , 清零位为 0 ,保留位为1
//(1) 先左移一位
*
left = b << 1;
//(2) 保存偶数位 ,将奇数位清零
left = left & 0b10101010;
//(3)右移一位
right = b >> 1 ;
//(4)保留偶数位 , 将奇数位 清零
right = right & 0b01010101 ;
//(5) 按位或
printf("%d\n" , left | right);
*/
//栈区内存分配原则:从高到低分配,从低到高 存取
// 地址 : 内存单元的编号.
//
// int a = 10 ;
// int b = 5 ;
// printf("%p %p\n",&a ,&b);
// int a [5] = {1,2,3,4,5};
//
// printf("%p \n%p \n%p \n%p \n%p \n %p \n" ,&a[0], &a[1] ,&a[2] ,&a[3] ,&a[4] ,a);
// printf("%d \n " , 3 ^ 5);