% 和 /
除了 % 操作符之外,其他几个操作符可以作用于整数和浮点数。
对于 / 操作符如果两个操作符都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法。
% 操作符的两个操作必须为整数。
位移操作符(左移<< 右移>>(移动一位除以2))
右移>>(移动一位除以2)
int main(){
//例题一(整数)
// int a=16;
// int b=a>>2; //16/2/2=4
// printf("%d\n",b);//得4
//例题二(负数)
int a=-1;
//储存到内存的是补码
//100000000000000000000001 - 原码
//111111111111111111111110 - 反码
//补1 11111111111111111111111 丢1 - 补码
int b=a>>1;
printf("%d\n",b);//得-1
return 0;
}
左移<<(乘以2)
int main(){
int a=10;
//00000000000000000000000000000101=5
int b=a<<1;00000000000000000000000000001010=10
printf("%d\n",b);//4
return 0;
}
按位与--&和或--|
int main()
{
//按位与--&(二进制位相同为1,不同为0)
// int a=3;//011
// int b=5;//101
// int c=a&b;//001
// printf("%d\n",c);
//按位或--|(二进制位有1取1)
int a=3;//011
int b=5;//101
int c=a|b;//111
printf("%d\n",c);
return 0;
}
//异或--^二进制位(相同为0,相异为1)
int main()
{
// int a=3;//011
// int b=5;//101
// int c=a^b;//110
// printf("%d\n",c);
//例题:交换两个整形变量得数值
int a=3;
int b=5;
printf("交换前:a=%d b=%d\n",a,b);
a=a^b;//011和101=110
b=a^b;//110和101=011=3
a=a^b;//110和011=101=5
printf("交换后:a=%d b=%d\n",a,b);
return 0;
}
//&--取地址操作符
int main ()
{
int a=10;
int* p=&a;//取地址操作符
*p=20;//解引用操作符
printf("a=%d\n",a);//20
return 0;
}
//输出a=20
//按位取反(~)
int main(){
int a=0;
//~按(二进制)位取反
//00000000000000000000000000000000 (0)
//11111111111111111111111111111111 - 补码(取反后)
//11111111111111111111111111111110 - 反码
//10000000000000000000000000000001 - 原码(-1)
printf("%d\n",~a);//打印的是原码(-1)
//应用
int b=11; //00000000 00000000 00000000 00001011
//(1<<2)
00000000 00000000 00000000 00000001 ->00000000 00000000 00000000 00000100
b=b|(1<<2); //00000000 00000000 00000000 00001111
printf("%d\n",b);//15
//~(1<<2)11111111 11111111 11111111 11111011
b=b&(~(1<<2)); //00000000 00000000 00000000 00001011
printf("%d\n",b);//11
return 0;
}