第二节
#### 位运算 ####
创建文件bit_operation.c
int main(void)
{
int i = 0b101010;
int j = i << 2;//左移两位:10101000
//0xa8
printf("j = 0x%x \n",j);
int k = i >> 4; //右移四位:0010;注意:移出数据范围(移出去的数据)丢失
//0x2
//char变量表示的数据范围:[-128,127];如果超出范围,则循环
char ch = 127;
char chi = 128;
char chin = 130;
char china = -129;
printf("ch = %d chi = %d chin = %d china = %d \n",ch,chi,chin,china);
//127 -128 -126 127(会有警告)
/*
//位异或(^)
//规则:相异就或;
//真值表达式:0^1=1;1^0=1;0^0=0;1^1=0;
//用途:对数据的特定位取反
int i = 0b1001010;
int j = 0b0110110;
int k = i ^ j;
//0b111 1100
printf("k = %x%x \n",k);
*/
/*
//逻辑取反,非0即1;规则:假变真,真变假
int i = 9;
int j = !i;//i值为真,逻辑取反,变成假,即0
printf("j = %d \n",j);
int k = !!i;//两次逻辑取反,得到本身属性
printf("k = %d \n",k);
*/
#if 0 //位取反规则:
int i = -9; //ob1000...1001
//补码:1...0111
//取反:0...1000
//实质上,取反过程是补码取反,也就是先补码,再取反
int j = ~i;
printf("j = 0x%x \n",j);
int k = ~j;//== k = ~j = ~~i;对一个数连续取反,得到本身
printf("k = 0x%d \n",k);
int m = 9;// 0b0000...1001
int n = ~m;
//取反:1111...0110
//0x:0xfffffff6
printf("m = 0x%d \n",m);
printf("n = 0x%x \n",n);
#endif
/*
//在计算机内存储数据规则:补码存储;正数的补码是其本身,负数的补码:
int i = -9;// 0b1000...1001
// 第一位表示正负位,负数用1,正数用0
//补码:1111....0111;补码规则:取反加一(第一位不动)
//十六进制中,0xfffffff7
printf("i = 0x%x \n",i);
printf("sizeof(i) = %d \n",sizeof(i));
*/
return 0;
}