位操作符
移位操作符在不赋值的条件下不会改变被移位对象的值。
左移操作符
操作规则:左位丢弃,右位补零。例如 char a=1;a在计算机内被储存为二进制序列0001;a<<1表示a左移一位即移位成0010 a的值变为2。
右移操作符
右移操作分为算术右移和逻辑右移,算术右移,最右位丢弃,左位用原值的符号位填充。逻辑右移,右位丢弃,左位补0。使用右移操作符时具体是算术右移还是逻辑右移取决于编译器。
按位与/按位或/按位异或,
按位与操作符 & 是双目操作符,按位与:在同一位上若出现一个0,按位与后该位为0,只有都为1时,该位为1。
按位或操作符 | 是双目操作符,按位与:在同一位上若出现一个1,按位或后该位为1,只有都为0时,该位为0。
按位异或操作符 ^ 是双目操作符,按位与:在同一位上若相同,按位异或后该位为0,在同一位上若不同,按位异或后该位为1。
练习代码:求两个数二进制中不同位的个数
思路,通过异或将不同位变成1,再通过移位操作,求出一共有多少个1,从而得出有多少个位不同。
int main()
{
int a=0;int b=0;int c=0;int count=0;
scanf("%d %d",&a,&b);
c=a^b;
for(int i=0;i<32;i++)
{
if((c>>i)&1==1) count++;
}
printf("%d",count);
}
其他操作符
逻辑与操作符&&以及逻辑或操作符||
逻辑与:当全部为真时,才为真,当一个为假,便为假。逻辑或:当一个为真时,便为真,当全部为假时,才为假。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。